Kredi kartı numara doğrulama
Gelen bir epostada kredi kartı numarası nasıl doğrulanır şeklinde bir soru vardı.
Cevap : Luhn algoritmasıdır. Bir çok kişiye bu anlamsız gelebilir. Bunu basit bir örnekle açıklamayalım
16 Haneli bir kredi kartı numaramız olsun
6 | 7 | 6 | 2 | 0 | 5 | 0 | 1 | 2 | 1 | 5 | 2 | 6 | 3 | 8 | 4 |
Kart No | 6 | 7 | 6 | 2 | 0 | 5 | 0 | 1 | 2 | 1 | 5 | 2 | 6 | 3 | 8 | 4 |
adım 1 | 6×2 | 6×2 | 0x2 | 0x2 | 2×2 | 5×2 | 6×2 | 8×2 | ||||||||
12 | 12 | 0 | 0 | 4 | 10 | 12 | 16 | |||||||||
adım 2 | 1+2 | 1+2 | 0 | 0 | 4 | 1+0 | 1+2 | 1+6 | ||||||||
3 | 7 | 3 | 2 | 0 | 5 | 0 | 1 | 4 | 1 | 1 | 2 | 3 | 3 | 7 | 4 | |
adım 3 | 3+7+3+2+0+5+0+1+4+1+1+2+3+3+7+4 | |||||||||||||||
46 | ||||||||||||||||
adım 4 | mod10(46) = 6 |
Adım 1 : Sağ taraftan başlayarak çift haneli sayıları iki ile çarpıyoruz
Adım 2 : Adım birde bulduğumuz yeni sayının haneler toplamını buluyoruz
Adım 3 : Yeniden oluşmuş olan 16 haneli sayımızın haneler toplamını buluyoruz
Adım 4 : Adım 3 de bulunan sayının mod 10 değerini buluyoruz
Adım 4 sonucunda bulunan değer 0 ise bu sayı Luhn algoritmasını
gerçekliyordur. Yani elimizdeki kredi kartı numarası
geçerli bir kredi kartı numarasıdır diyebiliriz.
Bunun için basit bir php script ise aşağıdaki şekilde yazılabilir.
< ?php
$sayi="12231231131";
$odd = !strlen($sayi)%2;
$toplam = 0;
for($i=0;$i<strlen($sayi);++$i) {
$n=0+$sayi[$i];
$odd=!$odd;
if($odd) {
$toplam+=$n;
} else {
$x=2*$n;
$toplam+=$x>9?$x-9:$x;
}
}
if (($toplam%10)==0){ echo $sayi." için luhn algoritmasi geçerli";}
else {echo $sayi." için luhn algoritmasi geçerli değil";}
?>