dateparser, datefinder gibi bir modul kullanma imkanınız yoksa metin şeklinde yazılmış bir zaman verisini nasıl…
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";}
?>