JavaScript ile Luhn Algoritması Kullanarak Kredi Kartı Doğrulama

Luhn Kredi Kartı Doğrulama Algoritması

IBM'de çalışan bilim adamı Hans Peter Luhn tarafından üretilen bu algoritma, mod 10 algoritması olarak da bilinir. Dünyadaki tüm kredi kartı numaraları bir algoritmaya göre üretilirler. IMEI Numarası, Kanada Sosyal Güvenlik Numarası gibi birçok numara da benzer şekilde üretilir.

Web sitenize giren bir kişinin kredi kartının rakamlarının doğru girilip girilmediğini bu algoritma ile kontrol edebilirsiniz.

JavaScript kodları ile istemci tarafında kontrol yapmak, sunucu taraflı çalışmaya göre hızlı olduğundan, kullanıcı formu göndermeden bir yanlış varsa istemci tarafında hızlıca kontrol edip sonra gönderebilirsiniz. Luhn Algoritması hem basit çalışır hem de hızlıdır. Bu algoritma sadece kredi kartı numarasının geçerliliğini kontrol eder. 

Tabi ki gerçekte kredi kartı ile ilgili birçok bilgiye ihtiyaç vardır ve bu bilgiler de ancak bankanın sunucusundan öğrenilebilir. Örneğin kredi kartı numarası geçerli olabilir ama kişinin kredi kartı limiti dolmuştur, ya da kredi kartı numarası geçerlidir ama müşteri belki iptal ettirmiştir. Dolayısıyla bu algoritmayı, %100 kredi kartı onayı gerektiriren bir durumda kullanmak doğru değildir, sadece doğrulama(validation) işlemi için kullanılmalıdır.


Algoritma nasıl çalışıyor?


Kredi Kartı Numarası (Account Number) 7992739871 olsun, bir sayı atlanarak çift numaralılar 2 ile çarpılıyor. Çıkan sayı 9'dan küçükse aynen yazılıyor, eğer büyük ise çarpım sonucu elde edilen sayının haneleri toplanıyor. Örneğin 3 x 6 = 18 değeri 9'dan büyük olduğu için hane toplamı 1+8 = 9 alınıyor. Sonra en son satırda ise haneler toplanıyor, 7+9+9+4+7+6+9+7+7+2 = 67 elde ediyor, Bu toplam değeri Mod 10'a göre 0 ise kredi kartı geçerlidir, burada Mod 10'a göre 7 olduğundan son rakam 3 olabilir. Böylece toplam 70 edecek, mod 10'a göre kalan 0 olacaktır.

Örneğimizde 7992739871X burada X değeri 3 olacaktır. Birçok yöntem ile son doğrulama hanesi olan 3 hesaplanabilir, diğer yöntemleri kaynaklar kısmından inceleyebilirsiniz.









function Calculate(Luhn)
{
   
  var sum = 0;
   for (i=0; i<Luhn.length; i++ )
   {
     sum += parseInt(Luhn.substring(i,i+1));
   }
 
   var delta = new Array (0,1,2,3,4,-4,-3,-2,-1,0);
   
for (i=Luhn.length-1; i>=0; i-=2 )
   {
     var deltaIndex = parseInt(Luhn.substring(i,i+1));
     var deltaValue = delta[deltaIndex];
     sum += deltaValue;
}
  var mod10 = sum % 10;
  mod10 = 10 - mod10;

  if (mod10==10)
  {
    mod10=0;
  }
return mod10;
}






Aşağıdaki JavaScript fonksiyonu ile yukarıdaki formda yer alan metin kutusu değerlerini alıp, Calculate fonksiyonunu çağırıyoruz. parseInt fonksiyonu ile string şeklinde gelen değeri tam sayıya çeviriyoruz.


function Validate()
{
var Luhn=document.getElementById('KrediKartNo1').value;
Luhn=Luhn+document.getElementById('KrediKartNo1').value;
Luhn=Luhn+document.getElementById('KrediKartNo1').value;
Luhn=Luhn+document.getElementById('KrediKartNo1').value;
var LuhnDigit = parseInt(Luhn.substring(Luhn.length-1,Luhn.length));
var LuhnLess = Luhn.substring(0,Luhn.length-1);
if (Calculate(LuhnLess)==parseInt(LuhnDigit))
{
return true;
}
return false;
}

Aşağıdaki fonksiyon ise formdaki Kontrol Et butonuna tıklanınca tetikleniyor ve Validate (Doğrulama) fonksiyonunu çağırıyor. Ekrana alert ile sonucu yazıyoruz.
 
function kontrol()
{

if(!Validate()){
    alert('Kredi Kartı numarası hatalıdır, kontrol ediniz.');
    return false;
else alert('Kredi Kartı numarası geçerlidir.');
}

Luhn algoritması, C/C++, Java ve C# gibi birçok programlama dilinde yazılabilir.
Çalışan halini aşağıdaki linkten görebilirsiniz 

ONLINE DEMO

KAYNAKLAR
http://en.wikipedia.org/wiki/Luhn_algorithm
 

Bookmark and Share
Dil Değiştir(Change Language)