Altan Tanrıverdi | Yazılım | 5 yorum
PHP ile IBAN Doğrulama
IBAN doğrulaması gerektiren bir proje için geliştirdiğim fonksiyon aşağıda bulunuyor.
Resmi gazetede yayınlanan kriterlere uygun hazırlamaya çalıştım. Yaptığım testler %100 doğru döndü ancak, sizden de test sonuçlarını iletmenizi rica ediyorum. (Not: BC Math kullanır.)
// CopyLeft javam.org tarafından yayınlanmıştır.
function ibanDogrula ($deger) {
$iban = false;
$deger = strtoupper(trim($deger));
if(preg_match('/^TR\d{7}0[A-Z0-9]{16}$/', $deger)) {
$sayi = substr($deger,4,22).'2927'.substr($deger,2,2);
$sayi = str_replace(
array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'),
array(10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35),
$sayi
);
$iban = (1 == bcmod($sayi,97)) ? true:false;
}
return $iban;
}
Trackbacks/Pingbacks
- Faideli Bağlantılar #4 « Vuska Blog - [...] yine jquery’den. #17 : Mükemmel bir javascript grafik altyapısı.Yemede yanında yat. #18 : IBAN banka numarası doğrulama fonksiyonu,Javam ORG ...



Teşekkürler..!
Elinize sağlık
Regex doğrulama
^TR\d{7}0[A-Z0-9]{16}$
yerine
^TR\d{6}0[A-Z0-9]{16}$
olması gerekmez mi?
TR + (6 herhangi digit) + ’0′ digiti + ‘A-Z veya 0-9 16 digit’ şeklinde anladım.
son gönderdiğim yorumu iptal edebilirsiniz.
RegEx doğrulamada bir sorun yok.
Tekrar elinize sağlık.
Eline sağlık Altan.
Herkes bir tarafı merak etmiş; benim de aklım modulusa takıldı.
PHP Manual’ın bcmod sayfasında da benzer bir iban doğrulama fonksiyonu örnek olarak verilmiş ve orada da bcmod() kullanılmış. (http://tr.php.net/manual/en/function.bcmod.php#79981)
Şunu merak ettim: bcmath() ile bildiğimiz modulus operatörü (%) arasında bir fark var mıydı?
Baktım araştırdım ki ikisi de aynı şey gibi. Yani:
$modValue = 5 % 2;
ile
$modValue = bcmod(5 , 2);
aynı sonuçları döndürüyor, üstelik native operatörlerin çok çok daha hızlı çalışacağını kestirmek de güç olmasa gerek. Modulus işleminde precision gibi bir derdin de olmayacağını düşünürsek, bcmod()’u kim yazmış, neden yazmış içinden çıkamadım.
Can,
Operatörün gücü benim makinede yetmiyor maalesef. 32 bit (-214748348 ile 2147483647)