16.12.2009

Altan Tanrıverdi | Yazılım | 5 yorum

PHP ile IBAN Doğrulama

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.)

 

 

 

<?php

// 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;
}
  1. Teşekkürler..!

  2. fikret diyor ki:

    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.

  3. fikret diyor ki:

    son gönderdiğim yorumu iptal edebilirsiniz.
    RegEx doğrulamada bir sorun yok.
    Tekrar elinize sağlık.

  4. 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.

    • Altan Tanrıverdi diyor ki:

      Can,
      Operatörün gücü benim makinede yetmiyor maalesef. 32 bit (-214748348 ile 2147483647)

Trackbacks/Pingbacks

  1. 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 ...