TC Kimlik Numarası Algoritması Nasıl Çalışır?

Türkiye · · 7 dk okuma · Sorgulaa Editör Ekibi

11 hanenin ardındaki fikir: kendi kendini denetleyen numara

TC kimlik numarası, Türkiye Cumhuriyeti vatandaşlarına Nüfus ve Vatandaşlık İşleri tarafından verilen, 11 haneli ve kişiye özgü bir numaradır. Vergi dairesinden hastaneye, bankadan okul kaydına kadar neredeyse her resmi işlemde anahtar olarak kullanılır. Bu kadar çok yerde elle yazılan, telefonda okunan, formlara girilen bir numarada yazım hatası kaçınılmazdır. Bu yüzden numara, tıpkı IBAN ya da kredi kartı numaraları gibi, kontrol basamağı (checksum) içerecek biçimde tasarlanmıştır: son iki hane bağımsız bilgi taşımaz, ilk dokuz haneden matematiksel olarak türetilir. Böylece bir yazılım, hiçbir veritabanına bağlanmadan, girilen numaranın "en azından biçimsel olarak mümkün" olup olmadığını anlayabilir.

Checksum nedir, neden kullanılır?

Checksum, bir veri parçasının kendisinden hesaplanan ve o veriyle birlikte taşınan küçük bir özet değerdir. Alıcı taraf aynı hesabı yeniden yapar; sonuç taşınan değerle uyuşmuyorsa verinin yolda bozulduğu anlaşılır. Kimlik numaralarında "yol", çoğunlukla bir insanın parmakları ve klavyedir. Elle veri girişindeki hataların büyük bölümü iki türde toplanır: tek bir hanenin yanlış yazılması (3 yerine 8) ve yan yana iki hanenin yer değiştirmesi (47 yerine 74). İyi bir kontrol basamağı tasarımı bu iki hata türünü olabildiğince yüksek oranda yakalamayı hedefler.

Önemli bir ayrım: checksum bir güvenlik mekanizması değil, bir veri kalitesi mekanizmasıdır. Formül gizli değildir; amacı kötü niyetli kişileri durdurmak değil, iyi niyetli kullanıcının yazım hatasını anında göstermektir.

TC kimlik numarasının kuralları

Haneleri soldan sağa d1, d2, … d11 olarak adlandıralım. Geçerli bir numara şu koşulların tamamını sağlar:

  1. Numara tam 11 haneden oluşur ve yalnızca rakam içerir.
  2. İlk hane (d1) sıfır olamaz.
  3. 10. hane kuralı: Tek sıradaki ilk beş hanenin toplamı (d1+d3+d5+d7+d9) 7 ile çarpılır, bundan çift sıradaki dört hanenin toplamı (d2+d4+d6+d8) çıkarılır. Sonucun 10'a bölümünden kalan d10'a eşittir.
  4. 11. hane kuralı: İlk on hanenin toplamının 10'a bölümünden kalan d11'e eşittir.

İlk dokuz hanenin kişilere hangi yöntemle atandığı kamuya açık biçimde belgelenmiş değildir; internette dolaşan "aile bireylerinin numaraları şu kurala göre sıralanır" türü iddialara dayanarak çıkarım yapmak doğru olmaz. Kesin olan, son iki hanenin yukarıdaki kurallarla belirlendiğidir.

Adım adım örnek hesaplama

Gerçek bir kişiyi hedeflemeyen, tamamen öğretici bir başlangıç seçelim: ilk dokuz hane 1 2 3 4 5 6 7 8 9 olsun.

AdımİşlemSonuç
Tek sıradaki haneler1 + 3 + 5 + 7 + 925
Çift sıradaki haneler2 + 4 + 6 + 820
10. hane(25 × 7 − 20) mod 10 = 155 mod 105
İlk on hanenin toplamı25 + 20 + 550
11. hane50 mod 100

Böylece algoritmayı sağlayan numara 12345678950 olur. Doğrulama yaparken aynı hesabı tekrarlar, bulduğunuz 5 ve 0 değerlerini numaranın son iki hanesiyle karşılaştırırsınız. Şimdi kullanıcının 4. haneyi yanlışlıkla 4 yerine 7 yazdığını düşünelim: çift toplam 23'e çıkar, 10. hane (175 − 23) mod 10 = 2 olmalıdır; oysa numarada 5 yazmaktadır. Hata anında yakalanır.

Algoritmanın az bilinen özellikleri

Son hane her zaman çifttir

Tek sıradaki toplamı T, çift sıradaki toplamı Ç ile gösterelim. 10. hane, 7T − Ç sayısının son basamağıdır. 11. hane ise T + Ç + d10 toplamının son basamağıdır; d10 yerine koyduğumuzda bu, T + Ç + 7T − Ç = 8T sayısının son basamağına eşit olur. 8 ile çarpılan her sayı çift olduğundan, geçerli bir TC kimlik numarasının son hanesi 0, 2, 4, 6 ya da 8'dir. Tek rakamla biten bir numarayı hiçbir hesap yapmadan reddedebilirsiniz.

Aynı formülün çıkarmasız yazımı

Mod 10 aritmetiğinde −1 ile 9 aynı şeydir. Bu yüzden 10. hane kuralı (7T + 9Ç) mod 10 biçiminde de yazılabilir; iki formül matematiksel olarak eşdeğerdir. Bu yazım, aşağıda değineceğimiz negatif kalan tuzağını kökten ortadan kaldırdığı için yazılımda tercih edilebilir.

Yakaladığı ve kaçırdığı hatalar

  • Tek hane hatası: İlk on haneden herhangi biri değişirse toplam 1 ile 9 arasında bir miktar kayar ve 11. hane tutmaz. Bu tür hataların tamamı yakalanır.
  • Komşu hanelerin yer değiştirmesi: Toplam değişmediği için 11. hane bunu göremez; iş 10. haneye kalır. Yer değiştiren iki hanenin farkı 5 değilse hata yakalanır. Fark tam 5 ise (1 ile 6, 2 ile 7, 3 ile 8, 4 ile 9, 0 ile 5) hata gözden kaçar. Örneğin 123456789 yerine 163456789 ve 613456789 başlangıçlarının ikisi de aynı kontrol hanelerini (1 ve 0) üretir.
  • Rastgele numara: İlk dokuz hanesi uydurulmuş, son iki hanesi rastgele yazılmış bir numaranın testi geçme olasılığı yaklaşık yüzde birdir.

Yazılımcılar için: formlarda doğru kullanım

Algoritmanın formlardaki görevi, sunucuya ya da resmi bir servise gitmeden önce bariz yazım hatalarını elemektir. Sağlam bir uygulama için şu sırayı izlemek yeterlidir:

  1. Girdiyi metin olarak alın. Numara aritmetik bir büyüklük değil, bir tanımlayıcıdır. 11 haneli değer 32 bitlik tam sayıya sığmaz; bazı dillerde sessizce taşar ya da kayan noktalı sayıya dönüşür.
  2. Normalleştirin. Baştaki ve sondaki boşlukları atın; kopyala-yapıştırla gelen görünmez karakterleri temizleyin.
  3. Biçimi denetleyin. Tam 11 karakter, tamamı rakam, ilk hane sıfırdan farklı. Hızlı eleme için son hanenin çift olup olmadığına da bakabilirsiniz.
  4. İki kontrol basamağını hesaplayıp karşılaştırın.
  5. Aynı denetimi sunucuda da yapın. Tarayıcıdaki kontrol kullanıcı deneyimi içindir; güvenilir olan yalnızca sunucu tarafıdır.

Negatif kalan tuzağı

En sık rastlanan uygulama hatası budur. 7T − Ç ifadesi negatif olabilir. Örneğin ilk dokuz hane 1 9 0 9 0 9 0 9 0 ise T = 1, Ç = 36 ve sonuç −29'dur. Matematiksel olarak −29 mod 10 = 1'dir; ancak PHP, JavaScript, Java, C# ve C gibi dillerde yüzde işareti işleci −9 döndürür. Python ise 1 döndürür. Negatif sonucu hesaba katmayan bir kod, bu tür geçerli numaraları hatalı diye reddeder. Çözüm basittir: kalana 10 ekleyip yeniden mod almak ya da doğrudan (7T + 9Ç) mod 10 biçimini kullanmak.

Veri koruma boyutu

TC kimlik numarası, 6698 sayılı Kişisel Verilerin Korunması Kanunu kapsamında kişisel veridir. Bir formda bu numarayı istemeden önce gerçekten gerekli olup olmadığını sorgulamak, gerekliyse aydınlatma yükümlülüğünü yerine getirmek, numarayı yalnızca amaçla sınırlı süre boyunca ve erişimi kısıtlanmış biçimde saklamak gerekir. Numarayı düz metin olarak log dosyalarına, hata raporlarına ya da URL parametrelerine yazmak en yaygın ihmallerdendir. Test ortamlarında gerçek kişilerin numaraları yerine algoritmayı sağlayan yapay numaralar kullanılmalıdır.

Algoritmik doğrulama neyi kanıtlamaz?

Testi geçen bir numara yalnızca "kurallara uygun yazılmış" demektir. Şunların hiçbirini göstermez: numaranın gerçekten birine verilmiş olduğunu, o kişinin hayatta olduğunu, formu dolduran kişinin numaranın sahibi olduğunu.

Bir numaranın belirli bir kişiye ait olup olmadığının teyidi, yalnızca yetkili kurumların resmi kimlik doğrulama altyapıları üzerinden, ilgili kişinin kendi beyan ettiği bilgilerle birlikte ve mevzuatın izin verdiği amaçlarla yapılabilir. Algoritma, bir numaradan kişinin adına, adresine ya da başka herhangi bir bilgisine ulaşmanın yolu değildir; böyle bir yol sunduğunu iddia eden siteler ya dolandırıcılık amaçlıdır ya da hukuka aykırı veri kullanmaktadır. Sorgulaa'daki TC kimlik no doğrulama aracı da yalnızca bu yazıda anlatılan matematiksel kontrolü yapar; girilen numarayı herhangi bir kişiyle eşleştirmez ve kişisel veri sorgulamaz.

Benzer sistemlerle kısa bir karşılaştırma

NumaraKontrol hanesi sayısıYöntem
TC kimlik numarası2Ağırlıklı toplam ve düz toplam, mod 10
Kredi kartı numarası1Luhn algoritması, mod 10
IBAN2MOD 97-10
Vergi kimlik numarası (10 hane)1Kendine özgü, konuma bağlı üs alma içeren mod tabanlı hesap

Özetle ve sık yapılan hatalar

  • Yalnızca 11. haneyi kontrol etmek: Düz toplam kuralı yer değiştirme hatalarını göremez; iki kural birlikte uygulanmalıdır.
  • Negatif kalanı unutmak: Geçerli numaraların bir kısmını reddeden, fark edilmesi zor bir hataya yol açar.
  • Numarayı sayı türüne çevirmek: Taşma ve biçim kaybı riski taşır; metin olarak işleyin.
  • "Algoritmadan geçti, kimlik doğrulandı" demek: Biçimsel geçerlilik ile kimlik doğrulama tamamen ayrı şeylerdir.
  • Numarayı gereksiz yere toplamak ve korumasız saklamak: Teknik bir hata değil, hukuki bir risktir.

TC kimlik numarası algoritması, dokuz hanelik bir gövdeye eklenen iki kontrol basamağından ibarettir; birkaç toplama ve bir çarpmayla hesaplanır, tek hane hatalarının tamamını ve yer değiştirme hatalarının büyük bölümünü yakalar. Doğru yerde, yani form girişinde ilk süzgeç olarak kullanıldığında hem kullanıcıyı hem sistemi gereksiz hatalardan korur. Bu yazı genel bilgilendirme amaçlıdır ve hukuki danışmanlık niteliği taşımaz; kişisel verilerin işlenmesine ilişkin yükümlülükler için güncel mevzuata ve Kişisel Verileri Koruma Kurumu'nun yayınlarına başvurulmalıdır.