Menü

Luhn algoritması: kart numarasındaki sağlama basamağı nasıl çalışır?

Luhn algoritması, kart numaralarındaki yazım hatalarını yakalayan mod-10 tabanlı bir toplama kuralıdır. Elle nasıl hesaplandığını ve neyi korumadığını anlatıyoruz.

Yayın tarihi

  • test verisi
  • doğrulama
  • algoritma

Luhn algoritması, bir kart numarasının yanlış yazılıp yazılmadığını anlamak için kullanılan basit bir toplama kuralıdır. Bu yazıda kuralın arkasındaki fikri, sağlama basamağının neden numaranın içinde durduğunu, hesabı kâğıt üzerinde nasıl yapacağınızı ve bu kontrolün hangi durumlarda sizi yanıltacağını bulacaksınız.

Sağlama basamağı neden numaranın içinde duruyor?

Uzun bir numarayı tuşlayan bir kişinin hata yapması kaçınılmazdır. İnsanlar bir basamağı yanlış yazar, iki komşu basamağın yerini değiştirir veya bir basamağı atlar. Numara on üç ile on dokuz basamak arasında değiştiğinde bu hatalar gözle fark edilmez.

Kart numaralarında çözüm, numaranın son basamağını bir denetim basamağına ayırmaktır. Kalan basamaklar numaranın gövdesidir; son basamak ise gövdeden hesaplanan bir toplamın sonucudur. Numara yazılırken bu basamak, kalan basamaklar öyle gerektirdiği için oradadır. Kimse onu elle seçmez, bir kural onu üretir.

Bu yaklaşımın güzelliği, kontrolün numaranın kendisiyle birlikte taşınmasıdır. Numarayı giren tarafın ek bir kontrol basamağı iletmesine gerek yoktur; numaranın kendisi kendi tutarlılığını kanıtlar. Kart numaralarında bu uygulama, ISO/IEC 7812 düzenlemesiyle yaygınlaşmıştır.

Luhn algoritması hangi hataları yakalar?

Luhn, mod-10 olarak bilinen bir toplama kuralıdır. IBM’de çalışan Hans Peter Luhn tarafından 1950’lerde geliştirilmiştir ve bugün kart numaralarının yanı sıra cihaz kimliklerinde, IMEI numaralarında ve başka birçok alanda karşımıza çıkar.

Yakaladığı hata türleri şunlardır:

  • Tek bir basamağın yanlış yazılması her zaman yakalanır.
  • Komşu iki basamağın yer değiştirmesi çok büyük ölçüde yakalanır, ancak hepsinde değil.
  • Bir basamağın atlanması veya araya fazladan bir basamak girmesi genellikle toplamı bozar.

Buradaki istisna önemlidir: yer değiştiren iki basamak aynı değeri ürettiğinde, örneğin sıfır ile dokuz yer değiştirdiğinde, toplam değişmez ve hata sessizce geçer. Bu yüzden Luhn “her hatayı yakalayan” bir kontrol değildir; yalnızca kaba yazım hatalarını yakalayan bir süzgeçtir.

Luhn algoritması elle nasıl hesaplanır?

Hesabı yapmak için bir numaranın basamaklarını sağdan sola doğru işlemeniz gerekir. İzlenecek sıra şudur:

  1. Numaranın en sağındaki basamağı, yani sağlama basamağını şimdilik bir kenara ayırın. Onu iki katına çıkarmayacaksınız.
  2. Sağdan sola ilerlerken her ikinci basamağı iki katına çıkarın.
  3. İki katına çıkan bir basamak dokuzdan büyükse sonuçtan dokuz çıkarın; bu, basamağın kendi rakamlarını toplamakla aynı sonucu verir.
  4. Elde ettiğiniz bütün değerleri toplayın.
  5. Toplam onun tam katıysa numara denetimden geçer.

Küçük bir örnekle alıştırma yapalım. Dört basamaklı bir dizinin son basamaklarının iki, dört, iki, iki olduğunu düşünün. Değişim sağdan uygulandığı için sağdan ikinci ve dördüncü basamak iki katına çıkar; bunların katkısı iki katına çıkmayan basamaklardan belirgin biçimde büyük olur. Tek basamaklı bir dizide bu farkı gözle görmek kolaydır, ancak numara uzadıkça işin içine onlarca basamak girer ve hesaplamayı zihinden sürdürmek güvenilmez hale gelir.

Adım adım bir örnek

Ödeme hizmeti sağlayıcılarının belgelerinde genel başarılı test kartı olarak geçen numara, dört ile başlayan ve on altı basamağa tamamlanan bir dizidir. Bu numaranın basamaklarını sırayla yazdığımızda desen dört, iki, dört, iki biçiminde ilerler. Numaranın arkasında hiçbir hesap yoktur; yalnızca doğrulama akışını denemek için kullanılan kurgusal bir örnektir.

On altı basamaklı bir numarada, soldan sayıldığında tek konumlarda duran basamaklar iki katına çıkarılır. Bu numarada iki katına çıkan basamakların çoğu dört ve iki olduğu için sonuç sırasıyla sekiz ve dört olur; iki basamağı da dokuzdan küçük kaldığı için çıkarma gerekmez. İki katına çıkarılmayan basamaklar ile bu değerleri topladığınızda toplam onun bir katına oturur ve numara denetimden geçer.

Bu örneğin öğrettiği şey, algoritmanın gizemli olmadığıdır. Kural tek bir toplama ve bölme işleminden ibarettir; hesabı bir kâğıt üzerinde birkaç dakikada tamamlayabilirsiniz.

Nerede işe yarar, nerede yaramaz

Luhn bir yazım denetimidir, bir güvenlik önlemi değildir. En sık karıştırılan nokta budur. Bir numaranın Luhn denetiminden geçmesi şu üç şeyi kanıtlar: basamak sayısı bir sağlama basamağı içerecek kadar uzundur, tek basamaklı bir yazım hatası yoktur ve komşu yer değiştirme hataları büyük olasılıkla yoktur. Bunun dışında hiçbir şey söylemez.

Denetimden geçen bir numaranın gerçekten var olduğunu, bir kuruluşa ait olduğunu veya ödeme yapabileceğini göstermez. Her yıl üretilen test numaralarının tamamı bu denetimden geçer; çünkü üretim sırasında sağlama basamağı tam bu kurala göre hesaplanır. Bu numaralar yapısal olarak geçerlidir ama hiçbiri hiçbir zaman gerçekte piyasaya sürülmemiştir.

Bir de pratik bir uyarı ekleyelim: Luhn, kart ağına göre değişen uzunluk kurallarını bilmez. On beş basamaklı bir numara bir ağ için doğru, bir başkası için yanlış olabilir. Bu yüzden doğrulama sırasında uzunluk kontrolü ile Luhn kontrolü ayrı ayrı ele alınmalıdır.

Üretici ile denetimden geçen numaralar oluşturun

Elinizdeki bir numaranın doğru olup olmadığını sınamanın en hızlı yolu, sağlama basamağı tutarlı yeni bir numarayla karşılaştırmaktır. Sitemizdeki üretici, seçtiğiniz kart ağına ve istediğiniz adede göre test numaraları üretir; her numaranın sağlama basamağı kurala uygun hesaplanır. Ayrıca kısmi bir numarayı yapıştırıp eksik basamakları tamamlayabilir, üretilen test kartlarını son kullanma tarihi ve güvenlik koduyla birlikte tek seferde kopyalayabilirsiniz. Araç şu adreste: test kredi kartı numarası üretici.

Hazır bir test seti arıyorsanız, test kredi kartı numaraları yazısı hangi numaranın hangi davranışı sınadığını anlatıyor.

Geliştiriciler için: doğrulama sırası ve sık yapılan hatalar

Doğrulamayı tek bir fonksiyon gibi düşünmeyin; sırayla çalışan bir süzgeç olarak kurun. Önce boşluk, tire ve parantez gibi ayırıcıları temizleyin. Ardından yalnızca rakam kaldığından emin olun. Sonra uzunluğu kart ağının beklediği aralıkla karşılaştırın. Ancak bundan sonra Luhn hesabını yapın. Sıra önemlidir: Luhn’u en başta çalıştırırsanız, ayırıcı karakterler yüzünden doğru bir numara bile reddedilebilir.

En sık yapılan hata, sağlama basamağını iki katına çıkarma yönünü karıştırmaktır. Kural numaranın uzunluğuna göre hizalanır: basamak sayısı çiftse soldan ilk basamak iki katına çıkarılır, tekse ikinci basamaktan başlanır. Bu ayrımı test etmek için hem on beş hem on altı basamaklı numaralarla deneme yapın. İkinci sık hata, on beş basamaklı numaraların dokuzla çıkarma adımını atlamaktır; iki katına çıkan basamak dokuzu geçtiğinde toplam bozulur.

Test verisi tarafında üç kural yeterlidir. Denetimden geçen ve geçmeyen en az birer numara bulundurun; böylece hem başarı hem hata yolu kapsanır. Numaraları test dosyalarında sabitleyin; rastgele üretim, bir hata tekrarlandığında nedenini bulmayı zorlaştırır. Son olarak doğrulamayı yalnızca tarayıcıya bırakmayın; sunucu tarafında da aynı kontrolleri çalıştırın, çünkü istemciden gelen veriye güvenilmez.

Sonraki adımlar

Luhn’un ne yaptığını anladıktan sonra sıradaki adım, doğrulamanın ödeme akışındaki yerini netleştirmektir. Kart numarası doğrulama yazısı bu süzgecin hangi katmanda durması gerektiğini anlatıyor; numaranın hangi basamak grubunun ne anlama geldiğini merak ediyorsanız kart numarası biçimi yazısına göz atın. Kendi test numaralarınızı hemen üretmek için üreticiyi açmanız yeterli.

Okumaya devam edin

Sahte kredi kartı numarası üretici hakkında makaleler