JavaScript TC Kimlik No Doğrulama

Yazıda TC kimlik sisteminin kuralları verildikten sonra JavaScript ile TC kimlik no doğrulama adım adım anlatılmıştır.

TC kimlik numaralarının en belirgin özelliği 11 hane olması ve son hanesinin çift haneli olduğu söylenebilir.

Ancak TC kimlik no sisteminin daha karmaşık bir yapısı vardır.

Hatta TC kimlik algoritmasıyla yakın akrabaların TC kimlik numaraları bile bulunabilir.

TC kimlik no kuralları;

  1. TC kimlik no 11 haneli rakamlardan oluşur.
  2. İlk rakam sıfır (0) olamaz.
  3. 1, 3, 5, 7 ve 9. hanelerin toplamının 7 katı ile 2, 4, 6 ve 8. hanelerin toplamı çıkartılır, sonucun 10’a bölümünden kalanı 10. haneyi verir.
  4. İlk 10 hanenin toplamının 10’a bölümünden kalan, son haneyi verir.
  5. Ayrıca çeşitli hatalı kabul edilen TC kimlik numaraları vardır.

TC kimlik no kurallarını adım adım JavaScript kodlarına dökelim.

TC kimlik no doğrulama işlemini bir fonksiyonda yazmamız her zaman kullanabilmek için iyi olacaktır.

<script>
"use strict";
  function TCNOKontrol(TCNO) {
  }
</script>

Fonksiyon sadece bir adet parametre alır.

Yazılan fonksiyon içerisinde ilk TC kimlik kuralının sağlaması yapılmıştır.

<script>
"use strict";
  function TCNOKontrol(TCNO) {
    if (TCNO.length != 11) return false;
    if (isNaN(TCNO)) return false;

    return true;
  }
</script>

İkinci kural ise TC kimlik numarasının ilk hanesinin sıfır (0) olamayacağıdır.

<script>
"use strict";
  function TCNOKontrol(TCNO) {
    if (TCNO.length != 11) return false;
    if (isNaN(TCNO)) return false;
    if (TCNO[0] == 0) return false;

    return true;
  }
</script>

Sıradaki kuralımız 1, 3, 5, 7 ve 9. hanelerinin toplamının 7 katı ile 2, 4, 6 ve 8. hanelerin toplamının çıkarılması ile elde edilen sonucun 10’a bölümünden kalan 10. haneyi vermesi gerekir.

<script>
"use strict";
  function TCNOKontrol(TCNO) {
    var tek = 0,
      cift = 0,
      sonuc = 0;

    if (TCNO.length != 11) return false;
    if (isNaN(TCNO)) return false;
    if (TCNO[0] == 0) return false;

    tek = parseInt(TCNO[0]) + parseInt(TCNO[2]) + parseInt(TCNO[4]) + parseInt(TCNO[6]) + parseInt(TCNO[8]);
    cift = parseInt(TCNO[1]) + parseInt(TCNO[3]) + parseInt(TCNO[5]) + parseInt(TCNO[7]);

    tek = tek * 7;
    sonuc = Math.abs(tek - cift);
    if (sonuc % 10 != TCNO[9]) return false;

    return true;
  }
</script>

Kafanız diziler sıfırdan başladığı için karışabilir 🙂

Sonraki kural ilk 10 hanenin toplamının 10’a bölümünden kalanın 11. haneyi vermesidir.

<script>
"use strict";
  function TCNOKontrol(TCNO) {
    var tek = 0,
      cift = 0,
      sonuc = 0,
      TCToplam = 0,
      i = 0;

    if (TCNO.length != 11) return false;
    if (isNaN(TCNO)) return false;
    if (TCNO[0] == 0) return false;

    tek = parseInt(TCNO[0]) + parseInt(TCNO[2]) + parseInt(TCNO[4]) + parseInt(TCNO[6]) + parseInt(TCNO[8]);
    cift = parseInt(TCNO[1]) + parseInt(TCNO[3]) + parseInt(TCNO[5]) + parseInt(TCNO[7]);

    tek = tek * 7;
    sonuc = Math.abs(tek - cift);
    if (sonuc % 10 != TCNO[9]) return false;

    for (var i = 0; i < 10; i++) {
      TCToplam += parseInt(TCNO[i]);
    }

    if (TCToplam % 10 != TCNO[10]) return false;

    return true;
  }
</script>

Sondaki kural için isteğe göre hatalı TC kimlik numaraları bir dizide tutularak karşılaştırma yapılabilir.

<script>
"use strict";
  function TCNOKontrol(TCNO) {
    var tek = 0,
      cift = 0,
      sonuc = 0,
      TCToplam = 0,
      i = 0,
      hatali = [11111111110, 22222222220, 33333333330, 44444444440, 55555555550, 66666666660, 7777777770, 88888888880, 99999999990];;

    if (TCNO.length != 11) return false;
    if (isNaN(TCNO)) return false;
    if (TCNO[0] == 0) return false;

    tek = parseInt(TCNO[0]) + parseInt(TCNO[2]) + parseInt(TCNO[4]) + parseInt(TCNO[6]) + parseInt(TCNO[8]);
    cift = parseInt(TCNO[1]) + parseInt(TCNO[3]) + parseInt(TCNO[5]) + parseInt(TCNO[7]);

    tek = tek * 7;
    sonuc = Math.abs(tek - cift);
    if (sonuc % 10 != TCNO[9]) return false;

    for (var i = 0; i < 10; i++) {
      TCToplam += parseInt(TCNO[i]);
    }

    if (TCToplam % 10 != TCNO[10]) return false;

    if (hatali.toString().indexOf(TCNO) != -1) return false;

    return true;
  }
</script>

Kullanımı aşağıda yer almaktadır.

<script>
"use strict";
  if(TCNOKontrol("12345678903")) {
    alert("Doğru TC kimlik no");
 } else {
    alert("Yanlış TC kimlik no");
 }
</script>

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!