Luhn algoritması, özellikle kredi kartı numaralarının doğrulanmasında yaygın olarak kullanılan bir algoritmadır. Ancak, bu algoritmanın detayları hakkında pek bir bilgim yok. Luhn algoritması tam olarak nedir, nasıl çalışır ve hangi durumlarda kullanılmak daha doğrudur? Üzerinde kullanılan veriler nasıl hazırlanır ve sonuçlar neyi gösterir?
Luhn Algoritması Nedir?
Tanımı
Luhn algoritması, çek-sum (toplam kontrolü) bazlı bir doğrulama algoritmasıdır. 1954 yılında Hans Peter Luhn tarafından geliştirilmiştir. Genellikle kredi kartı numaralarının doğrulanmasında kullanılır, ancak başka sayısal dizilerde de geçerliliği kontrol etmek için kullanılabilir.
Amacı ve Kullanım Alanları
Luhn algoritması, genel olarak hatalı veya yanlış girilen numaraların algılanmasına yardımcı olur. Algoritma, basit bir modül kullanarak, bir sayısal dizinin geçerli olup olmadığını belirler. Kredi kartları dışında, sosyal sigorta numaraları ve banka hesapları gibi diğer numara serilerinin doğrulanmasında da kullanılabilir.
Luhn Algoritması Nasıl Çalışır?
Adım Adım Açıklama
- Sağdan Sola İşleme: Kredi kartı numarası gibi bir sayı dizisini sağdan sola doğru incelemeye başlayın.
- Çift Basamakları İkiyle Çarpma:
- Dizideki her ikinci basamağı (sağdan başlayarak) iki ile çarpın.
- Eğer çarpım 9’dan büyükse, çarpımın basamaklarının toplamını alın (örneğin, 18 için 1 + 8 = 9).
- Toplamı Hesaplama:
- Dizideki bütün sayıları, çarpılanlar da dahil olmak üzere, toplayın.
- Mod 10 İşlemi:
- Toplamı 10’a bölün ve modunu (kalanını) alın.
- Eğer sonuç 0 ise, sayı dizisi geçerli kabul edilir.
def luhn_check(number):
def digits_of(n):
return [int(d) for d in str(n)]
digits = digits_of(number)
odd_digits = digits[-1::-2]
even_digits = digits[-2::-2]
checksum = sum(odd_digits)
for d in even_digits:
checksum += sum(digits_of(d * 2))
return checksum % 10 == 0
Örnek Üzerinde Çalışma
Örnek: Kredi kartı numarası 4539 1488 0343 6467, Luhn algoritmasına göre nasıl doğrulanır?
- Sağdan başlayarak ikinci sıradaki sayılar: 7, 4, 3, 8 (şeklinde sayılır) alınır ve ikiyle çarpılır.
- Eğer bir çarpım 9’dan büyükse basamakları toplanır.
- Tüm sayılar toplanır.
- Toplamın 10’la bölümünden kalan alınır. Eğer kalan 0 ise, numara geçerlidir.
Hangi Durumlarda Kullanılır?
Avantajları
- Hızlı ve Basit: Çek-sum hesaplanması hızlı ve basittir, bu da büyük veri setleri üzerinde uygulanabilirliğini sağlar.
- Belirli Hataları Tespit Etme: Algoritma, basit veri giriş hatalarını, yer değiştirmiş dijitleri veya basamak kaymalarını tespit etme olanağı sağlar.
Dezavantajları ve Uygun Olmadığı Durumlar
- Sadece Temel Hatalar: Luhn algoritması sadece basit hataları tespit eder. Karmaşık sahtekarlık örüntülerine karşı etkili değildir.
- Veri Güvenliği Sağlamaz: Algoritma, yalnızca sayının geçerliliğini doğrular fakat veri güvenliğini sağlamaz. Sahte ancak Luhn-testinden geçen numaralar oluşturulabilir.
Üzerinde Kullanılan Veriler Nasıl Hazırlanır?
Luhn testine tabi tutulacak sayısal diziler genellikle rakam gruplarından oluşmalıdır. Bu diziler, genellikle 16 haneli kredi kartı numaraları gibi sabit uzunlukta olan sayılardır. Bu numaralar hatalardan arındırılmış veya en azından hataların minimize edildiği ve daha önceden belirlenen kurallara uyan diziler olarak hazırlanır.
Sonuçların Gösterdiği
Algoritmanın çıktısı, sayısal dizinin bir veri tabanında kayıtlı olup olmamasına bakılmaksızın yalnızca bu girdinin belirli biçimsel kurallara uygunluğunu gösterir. Yani Luhn testi geçilmiş bir numara, o numaranın mutlaka geçerli bir kredi kartı olduğu anlamına gelmez.
TERİMLER:
Çek-Sum (Checksum): Bir veri grubu üzerinde hata ayıklamak veya doğruluk kontrolü yapmak için kullanılan bir toplam veya bileşik kontrol numarasıdır.
Luhn Algoritması Nedir?
Luhn algoritması, bir dizi sayının (genellikle kredi kartı numaraları) doğruluğunu kontrol etmek için kullanılan basit bir algoritmadır. Hans Peter Luhn tarafından geliştirilmiştir ve genellikle “modulus 10” veya “mod 10” algoritması olarak da bilinir.
Luhn Algoritması Nasıl Hesaplanır?
Adım 1: Son Rakamın Ayrılması
Numaranın son rakamı olan kontrol rakamı (check digit) dışındaki tüm rakamları alın.
Adım 2: Rakamların Konumlarına Göre Çift veya Tek Olması
Numaraları sağdan sola doğru sırayla (kontrol rakamını ihmal ederek) gözden geçirin. Sağdan ikinci, dördüncü vs. sıradaki rakamlar çift konumdadır (1, 3, 5 konumları).
Adım 3: Çift Konumdaki Rakamların İki Katını Alın
Çift konumda olan her rakamı ikiyle çarpın. Eğer bu çarpım 9’dan büyükse, çıkan değerin rakamlarını toplarsınız (örneğin, 14 → 1 + 4 = 5).
Adım 4: Tek Konumdaki Rakamları Toplayın
Tek konumda olan rakamları ve Adım 3’ten elde edilen değerleri toplayın.
Adım 5: Toplamın Modulus 10’u Alın
Elde edilen toplamı 10’a bölün. Eğer sonuç sıfırsa (yani toplam 10’un katıysa), numara geçerlidir.
Örnek Uygulama
Numara: 4539 1488 0343 6467
-
Kontrol rakamı olan son rakamı 7’yi ayırın.
-
Çift konum:
- 6, 4, 3, 0, 8, 4'ü kontrol edin.
-
Çift konumdaki rakamların iki katı:
- 6 \times 2 = 12 → 1 + 2 = 3
- 4 \times 2 = 8
- 3 \times 2 = 6
- 0 \times 2 = 0
- 8 \times 2 = 16 → 1 + 6 = 7
- 4 \times 2 = 8
-
Tek konum:
- 5, 9, 1, 8, 3, 6
-
Topla:
- Çift konum: 3 + 8 + 6 + 0 + 7 + 8 = 32
- Tek konum: 5 + 9 + 1 + 8 + 3 + 6 = 32
- Toplam: 32 + 32 = 64
-
Mod 10:
- 64 \mod 10 = 4 \neq 0 olduğu için numara geçerli değil.
TERİMLER:
Kontrol rakamı (check digit): Bir dizi sayıdaki hataları tespit etmek amacıyla kullanılan son rakam.
Modulus 10 (mod 10): Bir sayının 10’a bölümü sonucunda kalan sayı.