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('/^TRd{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;
}

8 Comments on "PHP ile IBAN Doğrulama"

  1. Soner Gönül diyor ki:

    Teşekkürler..!

  2. fikret diyor ki:

    Elinize sağlık

    Regex doğrulama
    ^TRd{7}0[A-Z0-9]{16}$
    yerine
    ^TRd{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. Can Ince diyor ki:

    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)

  5. Onur diyor ki:

    Çok Teşekkürler deniyorum siteme kurucam

  6. Selçuk diyor ki:

    Oldukça profesyonel bir site… Elimden geldikçe takip edeceğim.
    Lütfen bu ciddiyetinizden vazgeç meyiniz..

    Saygılarımla
    Selçuk Uzunsoy
    Computer Science Expert

Trackbacks for this post

  1. Faideli Bağlantılar #4 « Vuska Blog

Got something to say? Go for it!