X++’ ta IBAN Format Kontrolü

Herhangi bir tablomuzda IBAN hesap numarası bilgisini tuttuğumuz bir alan varsa kullanıcılar tarafından çoğu zaman bir kontrol koyulması istenir. IBAN formatı uzun olduğu için dikkat eksikliği sonucu hatalı veri girişleri olabilir. Ödeme ile ilgili olduğu için de bu verinin hatalı olması kabul edilemez. Geliştirilecek bir kontrolle veri girişi yapıldığı anda hataları önlemek en doğru yaklaşımdır. AX 2012’ de IBAN doğrulama için Bank sınıfında checkBankIBAN () metodu IBAN doğrulama için kullanılabilir. Bu metot aşağıdaki gibidir:

static boolean checkBankIBAN(BankIBAN _bankIBAN)

{

   str     strIBAN;

   str     numIBAN;

   str     buf;

   int     i;

   int64   num;

   int64   remainder;

   str     digits;

 

   boolean ret   = true;

   boolean error = true;

   ;

   if (_bankIBAN)

   {

       strIBAN = strUpr(SysCompareText::suppressWhiteSpace(_bankIBAN));

       if (strNFind(strIBAN,‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ’,1,strLen(strIBAN)) == 0)

       {

           strIBAN = subStr(strIBAN,5,strLen(strIBAN)) + subStr(strIBAN,1,4);

           while (i < strLen(strIBAN))

           {

               i++;

               if(strFind(subStr(strIBAN,i,1),‘0123456789’,1,1))

               {

                   buf = subStr(strIBAN,i,1);

               }

               else // convert letters into numerics

               {

                   buf = int2str(char2num(subStr(strIBAN,i,1),1) – 55);

               }

 

               numIBAN = numIBAN + buf;

           }

           if (str2int64(numIBAN) > 97)

           {

               digits    = subStr(numIBAN, strLen(numIban) – 1, strLen(numIban));

               numIBAN   = subStr(numIBAN, 1, strLen(numIBAN) – 2);

               while (strLen(numIBAN) > 2)        // calculating the check digits

               {

                   buf       = subStr(numIBAN,1,9);

                   numIBAN   = subStr(numIBAN,10,strLen(numIBAN));

 

                   num       = str2int64(buf);

                   remainder = num mod 97;

                   numIBAN   = int642str(remainder) + numIBAN;

               }

               numIban     = numIban + digits;

               remainder   = str2int64(numIban) mod 97;

               error       = false;

           }

       }

 

       if (remainder != 1 || error)

           ret = checkFailed(strFmt(“@SYS79333”, _bankIBAN));

   }

   return ret;

}

 

Bu metotu IBAN numarası alanını koyduğumuz tablonun validateField() metodunda çağırarak IBAN alanımızda format kontrolü yapabiliriz. Bunun için aşağıdaki gibi bir kod yazabiliriz:

 

public boolean validateField(FieldId _fieldIdToCheck)

{

   boolean         ret;

 

   ret = super(_fieldIdToCheck);

 

   switch (_fieldIdToCheck)

   {

       

 

    // IBAN format kontrolü

 

        case fieldNum(ContactPerson,ETGBankIBAN) :

               if (Bank::checkBankIBAN(this.ETGBankIBAN))

               {

                   this.ETGBankIBAN = strUpr(this.ETGBankIBAN);

                   ret = true;

               }

               else

               {

                   ret = false;

               }

               break;

   }

   return ret;

}

 

Bu örneğimizde ContactPerson alanına eklediğimiz ETGBankIBAN alanı için doğrulama yapılmıştır. Siz de aynı örneği kullandığınız alanlarda kullanabilirsiniz.

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s