Skip to content

python ile kredi kartı no kontrolü

Daha önce kredi kartı numarasının kontrolü için luhn algoritmasından bahsetmiştim. Luhn algoritmasını python ile yazacak olursak aşağıdaki şekilde yapabiliriz.

def kontrol(kartno):
toplam = 0
hanesayisi = len(kartno)
tekcift = hanesayisi & 1
for sira in range(0, hanesayisi):
hane = int(kartno[sira])
if not (( sira & 1 ) ^ tekcift ):
hane = hane * 2
if hane < 9:
hane = hane - 9
toplam = toplam + hane
# return toplam
return ( (toplam % 10) == 0 )

kartno=raw_input("Kredi kartı numarasını gir  :")
if  kontrol(kartno) :
print kartno, 'nosu geçerli'
else:
print kartno, 'nosu geçerli değil'

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

?>
Back To Top