Menü

Numara doğrulama: karakter kümesi, uzunluk ve kontrol basamağı

Numara doğrulamanın üç katmanını, bu katmanların sırasını ve dört farklı sonuç durumunu anlatıyoruz: biçim uyumu neden numaranın gerçek olduğunu göstermez?

Yayın tarihi

  • numara doğrulama
  • kontrol basamağı
  • biçim

Numara doğrulama, yapıştırılan bir numaranın önce hangi karakterlerden oluştuğuna, sonra kaç hane olduğuna ve en sonunda son hanesinin diğer hanelerden hesaplanıp hesaplanamadığına bakmaktır. Bu yazıda doğrulamanın bu üç katmanını, katmanların neden bu sırayla çalıştığını ve bir kontrolün sonucunun aslında dört ayrı durumdan hangisine düştüğünü bulacaksınız.

Numara doğrulama neyi kontrol eder?

Bir numarayı denetlerken sorulan soru “bu numara gerçek mi” değildir; sorulabilir soru “bu numaranın kendi içinde tutarlı olup olmadığı”dır. Eldeki tek şey numaranın kendisidir ve o numaranın üzerinde yalnızca birkaç yapısal özellik incelenebilir.

Doğrulama tam olarak üç katmandan oluşur. Birinci katman karakter kümesi: numarada hangi karakterlerin bulunabileceğidir; yalnızca rakam kabul eden bir düzende araya bir harf karıştıysa bu daha ilk adımda görülür. İkinci katman uzunluk: numaranın kaç haneden oluştuğudur; bir hane eksik veya fazla yazıldıysa bu da yalnızca sayarak anlaşılır. Üçüncü katman kontrol basamağı: numaranın son hanesinin, kalan hanelerden açık bir kurala göre hesaplanan değerle uyuşup uyuşmadığıdır.

Katman Neye bakar Hangi hatayı yakalar Neyi yakalayamaz
Karakter kümesi İzinli karakterler Yanlış tuşa basma, harf karışması Doğru karakterlerle yazılmış yanlış numara
Uzunluk Hane sayısı Eksik veya fazla hane Doğru uzunlukta yazılmış yanlış numara
Kontrol basamağı Son hanenin hesabı Tek hane hatası, çoğu yazım kayması Kurumun kaydında bulunmayan numara

Üç katman birlikte çalıştığında “bu numara kendi kuralına göre tutarlı” sonucuna varılır. Bu sonuç değerlidir ama dar bir sonuçtur.

Üç katmanlı süzgeç: karakter kümesi, uzunluk, kontrol basamağı

Katmanların sırası keyfî değildir. Önce numara normalleştirilir: boşluklar, tire, nokta ve eğik çizgi gibi ayırıcılar atılır, harflerde büyük küçük ayrımı kaldırılır. Bu adım atlanırsa aynı numaranın iki farklı yazımı iki farklı numara gibi görünür.

Normalleştirmeden sonra önce karakter kümesi, sonra uzunluk, en sonunda kontrol basamağı gelir. Sıra tersine çevrildiğinde sonuç yanıltıcı olur: içine harf karışmış bir numara için kontrol basamağı hesaplanmaya çalışılırsa sonuç “kontrol basamağı tutmuyor” diye raporlanır. Oysa gerçek sorun son hanede değil, numaranın ortasındaki karakterdedir. Kullanıcı da bu yüzden yanlış yeri düzeltmeye çalışır.

Aynı şey uzunluk için geçerlidir. Bir hane eksik yazılmış bir numarada kontrol basamağı her zaman tutmaz; bunu “kontrol basamağı uyuşmuyor” diye bildirmek, hatanın yerini gizler. Doğru bildirim “bu uzunluk bu düzene uymuyor” olmalıdır.

Biçim uyumu numaranın gerçek olduğunu gösterir mi?

Göstermez. Kontrol basamağı yalnızca numaranın kendi içinde tutarlı olduğunu kanıtlar. Numaranın bir kurum tarafından üretilip üretilmediği, kime ait olduğu veya kullanılıp kullanılamayacağı bu bilginin içinde yoktur.

Bu ayrımı bir benzetmeyle görmek kolaydır: bir anahtarın dişlerinin belli bir kalıba uyması, o anahtarın gerçekten bir kapıyı açtığı anlamına gelmez. Kalıp yalnızca anahtarın biçimsel olarak tutarlı olduğunu söyler. Aynı şekilde kontrol basamağı tutan bir numara, kendisini üreten kurumun kaydında bulunmayabilir.

Pratikte bu ayrım şu sonucu doğurur: “kontrol basamağı tutuyor” ifadesi hiçbir zaman “numara geçerli” diye kısaltılmamalıdır. Doğru ifade, numaranın yayımlanmış kurala uyduğudur; geri kalan her şey ayrı bir araştırmanın konusudur.

Bir numara neden birden çok düzene uyabilir?

Çünkü farklı kurumlar birbirine çok benzeyen kurallar yayımlar. Aynı sayıda haneden oluşan iki numara, aynı karakter kümesini kullanıyor ve aynı basit hesabı sağlıyor olabilir. Böyle bir durumda tek bir numara, birbirinden bağımsız iki düzenin de kuralına uyar.

Burada yapılacak şey numara için bir ülke veya kurum seçmek değildir. Çünkü her iki açıklama da doğrudur; birini seçmek diğerini yanlış saymak olur. Doğru davranış, uyan bütün düzenleri yan yana listelemek ve her biri için ayrı ayrı ne kadarını doğrulayabildiğini göstermektir. Kullanıcı hangi bağlamda çalıştığını bilir; araç bilemez.

Bu yüzden bir doğrulama aracının çıktısı tek bir etiket değil, adayların listesi olmalıdır. Aday listesi hem dürüsttür hem de kullanıcıya kendi bağlamını uygulama imkânı verir.

Normalleştirme: boşluk, tire ve büyük küçük harf

Numaralar nadiren olduğu gibi yazılır. Kâğıt formlarda boşluklarla gruplanır, tablolarda ayırıcılarla girilir, kopyala yapıştır sırasında başına görünmez bir karakter eklenir. Bu yüzden doğrulamanın ilk adımı her zaman aynıdır: numarayı sadeleştirmek.

Sadeleştirme sırasında atılan şeyler şunlardır:

  • Boşluklar ve sekme karakterleri.
  • Tire, nokta, eğik çizgi gibi gruplama işaretleri.
  • Harflerde büyük küçük farkı.
  • Tablo yazılımlarının eklediği görünmez karakterler ve baştaki kesme işareti.

Bu işlem numarayı onarmaz; yalnızca aynı numaranın tek bir yazımını elde etmeyi sağlar. Sadeleştirme bir güvenlik önlemi de değildir. Yaptığı tek şey, karşılaştırmanın tek bir biçim üzerinden yapılmasını sağlamaktır.

Kontrolün dört ayrı sonucu olabilir mi?

Olabilir ve olmalıdır. Tek bir “geçti geçmedi” ikilisi, karşılaşılan durumların çoğunu yanlış anlatır. Doğru çıktı dört durumu ayırır:

  1. Geçerli: Numara, ilgili düzenin yayımladığı kontrol basamağı hesabını sağlar.
  2. Geçersiz: Biçim uyuşur, ancak kontrol basamağı tutmaz.
  3. Yalnızca biçim: Düzen bir kontrol basamağı algoritması yayımlamamıştır; bu yüzden yalnızca uzunluk ve karakter yapısı doğrulanabilir.
  4. Kural yok: Bu numara için bilinen bir düzen yoktur; bu, numaranın sahte olduğu anlamına gelmez.

Üçüncü ve dördüncü durum, çoğu aracın atladığı iki durumdur. İkisi de “bilmiyoruz” demenin dürüst yollarıdır ve numarayı veya kullanıcıyı suçlamaz. Üçüncü durum, “kontrol basamağı yok” demektir; dördüncü durum ise “bu araçta karşılığı yok” demektir.

Geliştiriciler için: doğrulama hattının katmanları

Bir doğrulama hattı kurarken ilk karar, katmanların nerede duracağıdır. Karakter kümesi ve uzunluk kontrolü kullanıcı yazarken anında yapılabilir; bunlar ucuzdur ve yazım hatasını en erken yakalar. Kontrol basamağı hesabı da yereldir ve ağ gerektirmez, bu yüzden aynı anda çalıştırılabilir. Buna karşılık “bu numara bir kayıtta var mı” sorusu tamamen farklı bir iştir: yavaştır, dışarıya bağlıdır ve her zaman cevap vermeyebilir.

İkinci karar, hatanın nasıl raporlanacağıdır. Hata mesajı hangi katmanın başarısız olduğunu söylemelidir; aksi hâlde kullanıcı yanlış yeri düzeltir. Karakter kümesi hatası ile kontrol basamağı hatası aynı cümleyle bildirildiğinde, kullanıcı deneme yanılma yoluna girer.

Üçüncü karar, sonucun veri olarak taşınmasıdır. Dört durumlu bir sonuç, arayüzde de kayıtlarda da tek bir mantıksal değere indirgenmemelidir. “Yalnızca biçim” sonucunu mantıksal olarak “geçerli” saymak da “geçersiz” saymak da yanlıştır; ikisi de sistemin bilmediği bir şeyi biliyormuş gibi gösterir.

Dördüncü karar, normalleştirilmiş değerin saklanmasıdır. Kullanıcının yazdığı biçim ile kontrol edilen biçim ayrı tutulmazsa, sonradan yapılan karşılaştırmalar aynı numarayı iki farklı numara gibi görür.

Sonraki adımlar

İlk adım, kendi sisteminizde hangi numara türlerini kabul ettiğinizi yazılı hâle getirmek ve her biri için hangi katmanların uygulanacağını tek tek belirlemektir. İkinci adım, doğrulama çıktısını dört duruma göre ayırmak ve arayüzde bu durumları ayrı ayrı göstermektir. Elinizdeki bir numaranın hangi katmanları geçtiğini denemek isterseniz numara doğrulama aracına yapıştırıp sonucu görebilirsiniz; kontrol basamağı ailelerinin karşılaştırması için kontrol basamağı algoritmaları yazısı, kontrol basamağı olmayan numaralar için ise kontrol basamağı olmayan numaralar yazısı devam niteliğindedir. Hangi doğrulama yaklaşımının hangi işe uyduğunu görmek için çevrimiçi üreticiler ve kütüphaneler karşılaştırmasına da bakabilirsiniz.

Bu yazıdaki numara, örnek ve sonuçların tümü doğrulamanın katmanlarını göstermek için kurgulanmış sentetik örneklerdir; gerçek bir kişiye, kuruma, hesaba veya kayda karşılık gelmez ve gerçek bir doğrulama kanıtı ya da işlem dayanağı olarak kullanılamaz.

Okumaya devam edin

TC Kimlik Doğrulayıcı hakkında makaleler