T.C. kimlik numarası regex ile doğrulanır mı? Biçim ve algoritma kontrolü
T.C. kimlik numarasının 11 haneli biçimini regex ile, son iki kontrol basamağını algoritmayla denetleyin; doğrulamanın sınırlarını ve KVKK gerekliliklerini bilin.
T.C. kimlik numarası için regex yalnızca değerin 11 rakamdan oluştuğunu ve ilk rakamın sıfır olmadığını kontrol edebilir. Son iki rakam, önceki basamaklardan hesaplanan kontrol değerleridir; bunları doğrulamak için regex’in yanında algoritma gerekir.
Algoritmadan geçen bir sayı, tek başına gerçek bir kişiye ait olduğunu kanıtlamaz. Resmî kimlik doğrulaması gereken süreçlerde yetkili hizmet ve hukuki dayanak kullanılmalı; gereksiz T.C. kimlik numarası toplanmamalıdır.
Biçim kontrolü için regex
^[1-9]\d{10}$
Bu ifade ilk rakamı 1–9 arasında, kalan on karakteri rakam olarak sınırlar. Boşluk, tire veya harf kabul etmez. Kimlik numarasını matematiksel işlem amacıyla sayı türünde saklamak yerine string olarak işlemek, baştaki karakter ve uzunluk kontrollerini daha açık hâle getirir.
Kontrol basamağı algoritması
Basamakları soldan sağa 1’den 11’e numaralandırdığımızda:
- 10. basamak; 1, 3, 5, 7 ve 9. basamakların toplamının yedi katından 2, 4, 6 ve 8. basamakların toplamı çıkarılarak, sonucun 10’a göre kalanı alınarak bulunur.
- 11. basamak, ilk on basamağın toplamının 10’a göre kalanıdır.
JavaScript’te negatif mod davranışına karşı sonucu önce pozitif aralığa çekmek gerekir.
JavaScript doğrulama fonksiyonu
function validateTckn(value) {
const text = String(value);
if (!/^[1-9]\d{10}$/.test(text)) return false;
const d = [...text].map(Number);
const oddSum = d[0] + d[2] + d[4] + d[6] + d[8];
const evenSum = d[1] + d[3] + d[5] + d[7];
const digit10 = ((oddSum * 7 - evenSum) % 10 + 10) % 10;
if (d[9] !== digit10) return false;
const firstTenSum = d.slice(0, 10)
.reduce((total, digit) => total + digit, 0);
return d[10] === firstTenSum % 10;
}
Fonksiyon biçim ve matematiksel tutarlılık kontrolü yapar. Testlerde gerçek kişilere ait numaralar kullanmayın. Geçersiz uzunluk, sıfırla başlayan değer, harf içeren değer ve kontrol basamağı bozulmuş sentetik girdilerle olumsuz senaryoları sınayın.
Algoritma doğrulamasının sınırı
Kontrol basamakları yazım hatalarının bir bölümünü yakalamak için tasarlanmıştır. Algoritmadan geçen bir kombinasyon nüfus kaydında bulunmayabilir; ayrıca bulunan bir numaranın formu dolduran kişiye ait olduğunu göstermez. Kimlik eşleştirme gerekiyorsa yetkili doğrulama mekanizmasını, açık iş amacı ve uygun erişim kontrolüyle kullanın.
KVKK açısından veri minimizasyonu
T.C. kimlik numarası kişisel veridir. Formu tasarlarken bu alanın gerçekten gerekli olup olmadığını, hangi hukuki sebebe dayandığını, ne kadar süre saklanacağını ve kimlerin erişeceğini belirleyin. “Her ihtimale karşı” toplamak doğru bir yaklaşım değildir.
Numarayı uygulama loglarına, analiz araçlarına, hata ekranlarına veya URL parametresine yazmayın. Saklama zorunluluğu varsa aktarımda TLS, erişimde en az yetki, kayıtlı erişim ve uygun şifreleme/anahtar yönetimi uygulayın. Destek ekranlarında tamamı yerine maskelenmiş değer gösterin.
Frontend kontrolü yeterli değildir
Regex ve algoritma tarayıcıda hızlı geri bildirim sağlar, fakat istek doğrudan API’ye gönderilebilir. Backend aynı kontrolleri yeniden çalıştırmalı ve hatayı genel bir doğrulama mesajıyla döndürmelidir. Veritabanında benzersizlik kuralı gerekiyorsa iş sürecinin niteliğine göre ayrıca tanımlanmalıdır.
Kısa rehber
Sık yapılan hata
11 rakamı eşleştiren regex’i resmî kimlik doğrulaması sanmak veya test verisi olarak gerçek kişilerin numaralarını kullanmak.