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";}
?>