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.