İçeriğe geç
Hüseyin Bozdemir

Luhn algoritması ile kart numarası doğrulama

Luhn algoritması, kart numarasındaki yazım hatalarını yakalayan basit bir kontrol toplamı formülüdür. Kart numarasını yaz, kontrolden geçip geçmediğini ve hesabın her adımını anında gör.

Boşluk ve tire yok sayılır. Numara bu sayfadan hiçbir yere gönderilmez; kontrol tarayıcında çalışır.

Test numarası dene:

Bir numara yazdığında sonuç burada görünür.

Luhn algoritması nasıl çalışır?

Luhn algoritması, 1950'lerde IBM'de Hans Peter Luhn'un geliştirdiği basit bir kontrol toplamı formülü. Kart numarasının son hanesi kontrol hanesidir; diğer hanelerden hesaplanır ve numara yazılırken yapılan hataları yakalamak için oradadır. Kontrol için sağdan başlanır ve sondan ikinci haneden itibaren her ikinci hane ikiyle çarpılır. Çarpım 9'dan büyükse 9 çıkarılır, yani 16 yerine 7 yazılır. Sonra bütün haneler toplanır ve toplam 10'a tam bölünüyorsa numara kontrolden geçer. Bu yalnızca yazım hatasını yakalar: numaranın gerçek bir karta ait olduğunu ya da kartın kullanılabilir olduğunu göstermez, onu yalnızca kartı çıkaran banka söyler.

Adım adım örnek: 4111 1111 1111 1111

  1. En sağdaki 1 kontrol hanesi. Sağdan ikinci haneden başlayarak her ikinci hane ikiyle çarpılır; aşağıda turuncu olanlar.
  2. Çarpılan sekiz haneden biri 4, yedisi 1. Değerleri 8 ve 2 olur; 9'u geçen çarpım yok.
  3. Çarpılmayan sekiz hanenin hepsi 1, toplamları 8.
  4. Genel toplam 8 + 7 × 2 + 8 = 30. 10'a tam bölündüğü için numara Luhn kontrolünden geçer.
  1. 48
  2. 11
  3. 12
  4. 11
  5. 12
  6. 11
  7. 12
  8. 11
  9. 12
  10. 11
  11. 12
  12. 11
  13. 12
  14. 11
  15. 12
  16. 11

Toplam 30 → 10'a bölünür, geçerli

9'u geçen çarpımı görmek için 5555 5555 5555 4444'e bak: 5 × 2 = 10 olur, 9 çıkarılınca 1 kalır. Bu numarada toplam60. 15 haneli Amex test numarası 3782 822463 10005'te de kural aynı; çarpılacak haneler yine sağdan sayıldığı için soldan bakınca ikinci haneden başlar. Üç numarayı da yukarıdaki alana yazıp adımları görebilirsin. Hepsi ödeme sağlayıcılarının herkese açık yayımladığı test numaraları, gerçek bir karta ait değiller.

Kart numarasının log'a açık düşmemesi için Luhn kontrolünü nasıl kullandığımılog maskeleme yazısında anlattım: log'u tarayan bir test, Luhn'dan geçen diziyi arayarak sipariş numarası gibi kart olmayan değerleri eliyor.

Luhn'dan geçen numara gerçek bir kart mı?

Hayır. Rastgele 15 hane yazıp son haneyi hesaplarsan her seferinde Luhn'dan geçen bir numara elde edersin. Kontrol yalnızca numaranın yazımında bir hata olup olmadığını söyler. Kartın var olup olmadığını, açık olup olmadığını ve bakiyesini kartı çıkaran banka bilir; bunun için ödeme sağlayıcısı üzerinden bir yetkilendirme isteği gerekir.

Luhn hangi hataları yakalar?

Tek bir hanenin yanlış yazıldığı hataların hepsini yakalar. Yan yana iki hanenin yer değiştirmesini de çoğunlukla yakalar; istisna 09 ile 90'ın yer değiştirmesidir, çünkü ikisi de toplamı aynı bırakır. Hatanın hangi hanede olduğunu ise söyleyemez. Araç, numara geçmediğinde son hanenin ne olması gerektiğini gösteriyor, ama yanlış yazılan hane başka bir yerde de olabilir.

Kart numarası kaç hanedir?

Kart numaraları ISO/IEC 7812'ye göre 13 ile 19 hane arasındadır. Visa, Mastercard ve Troy kartlarının çoğu 16 hanedir, American Express 15. İlk 6 ya da 8 hane kartı çıkaran kurumu gösteren BIN'dir; Luhn bu kısmı ayrıca doğrulamaz.

Hesap numarasını da doğrulamak istersen: IBAN doğrulama ve çözümleme