Kredi Kartı Numaraları ve Luhn Algoritması
Finans · · 7 dk okuma · Sorgulaa Editör Ekibi
Kart numarası rastgele bir sayı değildir
Bir banka ya da kredi kartının ön yüzündeki 16 hane ilk bakışta rastgele dizilmiş gibi görünür. Gerçekte bu numara, ISO/IEC 7812 standardıyla tanımlanmış üç parçalı bir yapıdır: kartı çıkaran kuruluşu gösteren bir ön ek, o kuruluşun müşteriye atadığı hesap tanımlayıcısı ve en sonda tek haneli bir kontrol basamağı. Standartta bu numaranın adı PAN'dır (Primary Account Number). Son hanedeki kontrol basamağı, 1950'lerde IBM'de çalışan Hans Peter Luhn'un geliştirdiği ve bugün onun adıyla anılan algoritmayla hesaplanır. Bu yazıda önce numaranın parçalarını, sonra Luhn algoritmasının nasıl işlediğini, neyi yakalayıp neyi yakalayamadığını ele alacağız.
Hanelerin anlamı: MII, BIN/IIN ve hesap bölümü
İlk hane: sektör tanımlayıcısı (MII)
Numaranın ilk hanesi Major Industry Identifier olarak adlandırılır ve kartı çıkaran kuruluşun tarihsel olarak hangi sektöre ait olduğunu gösterir. Örneğin 3 seyahat ve eğlence kartlarına, 4 ve 5 bankacılık ve finans kuruluşlarına ayrılmıştır. Visa kartlarının 4 ile, Mastercard kartlarının büyük bölümünün 5 ile başlamasının kökeni budur.
BIN / IIN: kartı çıkaran kuruluş
Numaranın baş kısmı, kartı çıkaran kuruluşu tanımlar. Sektörde yaygın adı BIN (Bank Identification Number), standarttaki güncel adı ise IIN'dir (Issuer Identification Number); kartı çıkaran her kuruluş banka olmadığı için isim değiştirilmiştir. BIN uzun yıllar boyunca ilk 6 hane olarak kullanıldı; numara aralıklarının tükenmeye başlaması nedeniyle standart 8 haneli tanımlayıcıya geçişi öngördü ve kart şemaları bu geçişi kademeli olarak uyguluyor. Bu yüzden bugün hem 6 hem 8 haneli BIN'lerle karşılaşmak mümkündür.
BIN'den şu bilgiler okunabilir: kart şeması (Visa, Mastercard, Troy vb.), kartı çıkaran banka, kartın türü (banka kartı, kredi kartı, ön ödemeli) ve çoğu zaman kart seviyesi ile ülkesi. E-ticaret siteleri, siz daha numaranın tamamını yazmadan kart logosunu gösterebilmeyi ve uygun taksit seçeneklerini listelemeyi bu sayede başarır.
Hesap tanımlayıcısı ve kontrol basamağı
BIN'den sonraki haneler (son hane hariç) bankanın o karta atadığı tanımlayıcıdır. Bu bölüm banka hesap numaranızla aynı şey değildir; kart yenilendiğinde ya da kayıp nedeniyle değiştirildiğinde bu bölüm de değişir, hesabınız ise aynı kalır. En sondaki tek hane ise Luhn kontrol basamağıdır.
| Şema | Tipik başlangıç | Tipik uzunluk |
|---|---|---|
| Visa | 4 | 16 |
| Mastercard | 51–55 ve 2221–2720 aralığı | 16 |
| American Express | 34, 37 | 15 |
| Troy | 9792 | 16 |
Standart, numaranın en fazla 19 hane olmasına izin verir. Aralıklar zaman içinde genişletilebildiği için, kart kabul eden yazılımlarda güncel aralıkların şema belgelerinden ya da ödeme hizmeti sağlayıcısından teyit edilmesi gerekir.
Luhn algoritması adım adım
Algoritma yalnızca toplama ve ikiyle çarpma kullanır; 1950'lerin mekanik cihazlarında bile çalışabilecek kadar basit olacak şekilde tasarlanmıştır. Doğrulama şu adımlarla yapılır:
- Numaradaki boşluk ve tireleri atın; geriye yalnızca rakamlar kalsın.
- En sağdaki haneden (kontrol basamağından) başlayarak sola doğru ilerleyin.
- Sağdan ikinci haneden başlayarak her ikinci haneyi 2 ile çarpın.
- Çarpım 9'dan büyükse sonuçtan 9 çıkarın (bu, iki basamağını toplamakla aynıdır: 14 → 1+4 = 5 = 14−9).
- Dönüştürülmüş ve dokunulmamış bütün haneleri toplayın.
- Toplam 10'a tam bölünüyorsa numara Luhn testini geçer.
Sayısal örnek
Test amaçlı, gerçek bir karta ait olmayan 4539 1488 0343 6467 numarasını ele alalım. 16 haneli bir numarada sağdan ikinci hane soldan 15. haneye denk geldiği için, ikiyle çarpılanlar soldan 1., 3., 5. … 15. hanelerdir:
| Hane | 4 | 5 | 3 | 9 | 1 | 4 | 8 | 8 | 0 | 3 | 4 | 3 | 6 | 4 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| İşlem sonrası | 8 | 5 | 6 | 9 | 2 | 4 | 7 | 8 | 0 | 3 | 8 | 3 | 3 | 4 | 3 | 7 |
Dikkat edilecek iki nokta: 8 ikiyle çarpılınca 16 olur ve 9 çıkarılarak 7'ye iner; 6 ise 12 olur ve 3'e iner. Alt satırın toplamı 80'dir; 80 mod 10 = 0 olduğundan numara geçerlidir.
Şimdi son iki haneyi yer değiştirelim: …6476. Bu kez alt satırın son iki değeri 5 ve 6 olur, toplam 81'e çıkar ve test başarısız olur. Algoritma, tipik bir yazım hatasını yakalamıştır.
Kontrol basamağı nasıl üretilir?
Banka kartı basarken işlemi tersinden yapar: ilk 15 haneyi belirler, sonuna geçici olarak 0 koyup Luhn toplamını hesaplar ve toplamı bir sonraki onluğa tamamlayan rakamı kontrol basamağı olarak yazar. Örneğimizde son hane 0 alındığında toplam 73 çıkar; 80'e tamamlamak için gereken 7, kontrol basamağıdır. Formülle: (10 − toplam mod 10) mod 10.
Luhn neyi yakalar, neyi yakalayamaz?
Algoritmanın amacı güvenlik değil, kaza sonucu oluşan hataları elemektir.
- Tek hane hatası: Herhangi bir hanenin yanlış yazılması her zaman yakalanır.
- Komşu hanelerin yer değiştirmesi: Neredeyse tamamı yakalanır. Tek istisna 09 ile 90 çiftidir; bu ikisi yer değiştirdiğinde toplam değişmez.
- Atlamalı yer değiştirme ve bazı ikiz hatalar: Bir hane atlayarak yapılan yer değiştirmeler (örneğin 1. ve 3. hanelerin takası) aynı ağırlık grubunda kaldığı için fark edilmez; 22 ↔ 55 gibi bazı ikiz hane hataları da gözden kaçar.
Daha da önemlisi, Luhn gizli bir bilgi içermez: formül herkese açıktır ve herhangi bir 15 haneye uygun kontrol basamağını bulmak saniyeler sürer. Rastgele üretilmiş numaraların kabaca onda biri testi kendiliğinden geçer. Dolayısıyla Luhn'dan geçmek bir numaranın gerçek bir karta ait olduğunu, kartın aktif olduğunu ya da limitinin bulunduğunu göstermez. Bunu yalnızca bankanın provizyon (yetkilendirme) sistemi söyleyebilir.
Gerçek hayatta nerede kullanılır?
Ödeme formlarında Luhn, sunucuya hiçbir istek gitmeden tarayıcıda çalışan bir ilk süzgeçtir: kullanıcı bir haneyi yanlış yazdığında hata anında gösterilir, banka tarafına boşuna provizyon isteği gönderilmez. Ödeme altyapıları, POS yazılımları ve muhasebe sistemleri de kayıt girişinde aynı kontrolü uygular. Geliştiriciler test ortamlarında, ödeme sağlayıcılarının yayımladığı ve Luhn testini geçen ama hiçbir gerçek hesaba bağlı olmayan test numaralarını kullanır.
Algoritma kartlarla sınırlı da değildir. Cep telefonlarının IMEI numarasının son hanesi ve bazı ülkelerin resmi kimlik ya da şirket numaraları aynı yöntemle üretilir. Buna karşılık Türkiye'deki TC kimlik numarası ve IBAN farklı kontrol yöntemleri kullanır; "kontrol basamağı olan her numara Luhn'dur" varsayımı yanlıştır.
Sorgulaa'daki kart doğrulama ve BIN sorgulama araçları da tam olarak bu düzeyde çalışır: numaranın biçimsel tutarlılığını ve ön ekin hangi şema ile kuruluşa işaret ettiğini gösterir; kart sahibine, bakiyeye ya da limite dair hiçbir bilgiye erişmez.
Kart güvenliği için pratik ipuçları
- Kart numarası tek başına sır değildir, ama bütün set öyledir. Numara, son kullanma tarihi ve arka yüzdeki güvenlik kodu (CVV/CVC) birlikte ele geçtiğinde internetten alışveriş mümkün hale gelir. Kartın iki yüzünün fotoğrafını hiçbir gerekçeyle paylaşmayın.
- Güvenlik kodu hiçbir yerde saklanmamalıdır. Kart verisi işleyen kuruluşların uyduğu PCI DSS kuralları, bu kodun işlem sonrasında saklanmasını yasaklar. Kodu e-posta ya da mesajla isteyen bir "satıcı" kırmızı bayraktır.
- Sanal kart ve işlem limiti kullanın. Çoğu banka, internet alışverişleri için limiti sizin belirlediğiniz sanal kart sunar; asıl kartınızı internet kullanımına kapalı tutabilirsiniz.
- 3D Secure doğrulama kodunu kimseyle paylaşmayın. Banka görevlisi dahil hiç kimsenin bu koda ihtiyacı yoktur.
- Anlık bildirimleri açık tutun ve tanımadığınız bir işlem gördüğünüzde kartı uygulamadan geçici olarak kapatıp bankanızı arayın. İtiraz süreleri sınırlı olduğundan gecikmeyin.
- Fişlerde ve ekran görüntülerinde numaranın maskelenmiş olması normaldir; genellikle yalnızca ilk altı ve son dört hane görünür. Tam numarayı gösteren bir belgeyi paylaşmadan önce karalayın.
Özetle ve sık yapılan hatalar
- "Luhn'dan geçti, kart geçerli" demek: Test yalnızca yazım tutarlılığını ölçer; kartın varlığını ve kullanılabilirliğini ölçmez.
- İkiye katlamaya soldan başlamak: Yön her zaman sağdan sola doğrudur. Soldan başlayan bir kod 16 haneli kartlarda tesadüfen doğru çalışır, 15 haneli American Express numaralarında ise hatalı sonuç verir.
- Uzunluğu 16'ya sabitlemek: Geçerli kart numaraları 13 ile 19 hane arasında olabilir.
- BIN'i 6 haneye sabitlemek: 8 haneli BIN'e geçiş süreci devam ettiğinden, yazılımların iki uzunluğu da desteklemesi gerekir.
- Numarayı sayı türünde saklamak: Baştaki sıfırlar kaybolabilir ve hassasiyet sorunları çıkabilir; kart numarası her zaman metin olarak işlenmelidir.
Kısacası kart numarası; sektörü, kartı çıkaran kuruluşu ve müşteriye atanan tanımlayıcıyı taşıyan, sonundaki tek haneyle kendi kendini denetleyen yapılandırılmış bir koddur. Luhn algoritması bu denetimin hızlı ve ucuz yoludur; bir güvenlik önlemi değil, bir yazım denetimidir. Bu yazı genel bilgilendirme amaçlıdır, hukuki ya da mali danışmanlık niteliği taşımaz; şüpheli işlem ve itiraz süreçlerinde kartınızı veren bankanın güncel uygulaması esas alınmalıdır.