TC Kimlik No Doğrulama Algoritması

TC Kimlik No Doğrulama Algoritması

T.C. Kimlik numaraları 11 basamaktan oluşmaktadır.
İlk 9 basamak arasında kurulan bir algoritma bize 10. basamağı,
ilk 10 basamak arasında kurulan algoritma ise bize 11. basamağı verir.

T.C. Kimlik numarası algoritma kriterleri;

  1. Kimlik Numaraları 11 karakter olmak zorundadır.

  2. Her hanesi rakamsal değer içerir.

  3. İlk hane 0 olamaz.

  4. 3. 5. 7. ve 9. hanelerin toplamının 7 katından, 2. 4. 6. ve 8. hanelerin toplamı çıkartıldığında,
    elde edilen sonucun 10’a bölümünden kalan, yani Mod 10’u bize 10. haneyi verir.

  5. 2. 3. 4. 5. 6. 7. 8. 9. ve 10. hanelerin toplamından elde edilen sonucun 10’a bölümünden kalan,
    yani Mod10’u bize 11. haneyi verir.

Aşağıda C# Console uygulamasında yapılmış 2 farklı uygulamayı inceleyebilirsiniz.

1.Uygulama

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace TcUygulaması
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Tc Kimlik Noyu Giriniz:");
            string tcNo = Console.ReadLine();
            int toplam = 0; int toplam2 = 0; int toplam3 = 0;
            if (tcNo.Length == 11)
            {
                if (Convert.ToInt32(tcNo[0].ToString())!=0) //tc kimlik numaranın ilk hanesi 0 değilse
                {
                    for (int i = 0; i < 10; i++)
                    {
                        toplam = toplam + Convert.ToInt32(tcNo[i].ToString());
                        if (i%2==0)
                        {
                            if (i!=10)
                            {
                                toplam2 = toplam2 + Convert.ToInt32(tcNo[i].ToString()); // 7 ile çarpılacak sayıları topluyoruz
                            }
                            
                        }
                        else
                        {
                            if (i!=9)
                            {
                                toplam3 = toplam3 + Convert.ToInt32(tcNo[i].ToString());
                            }
                        }
                    }
                }
                else
                {
                    Console.WriteLine("Tc Kimlik Numaranızın ilk hanesi 0 olamaz.");
                }
            }
            else
            {
                Console.WriteLine("Tc Kimlik Numarınız 11 haneli olmak zorunda.Eksik ya da fazla değer girdiniz.");
            }
            if (((toplam2*7)-toplam3)%10==Convert.ToInt32(tcNo[9].ToString()); toplam%10==Convert.ToInt32(tcNo[10].ToString()))
            {
                Console.WriteLine("Tc Kimlik Numarası Doğru.");
            }
            else
            {
                Console.WriteLine("Tc Kimlik Numarası Yanlış!");
            }
 
            Console.ReadKey();
        }
    }
}

2.Uygulama

class Program
    {
        static void Main(string[] args)
        {
            string tcKimlikNo = Console.ReadLine();
            bool returnvalue = false;
            if (tcKimlikNo.Length == 11)
            {
                Int64 ATCNO, BTCNO, TcNo;
                long C1, C2, C3, C4, C5, C6, C7, C8, C9, Q1, Q2;
 
                TcNo = Int64.Parse(tcKimlikNo);
 
                ATCNO = TcNo / 100;
                BTCNO = TcNo / 100;
 
                C1 = ATCNO % 10; ATCNO = ATCNO / 10;
                C2 = ATCNO % 10; ATCNO = ATCNO / 10;
                C3 = ATCNO % 10; ATCNO = ATCNO / 10;
                C4 = ATCNO % 10; ATCNO = ATCNO / 10;
                C5 = ATCNO % 10; ATCNO = ATCNO / 10;
                C6 = ATCNO % 10; ATCNO = ATCNO / 10;
                C7 = ATCNO % 10; ATCNO = ATCNO / 10;
                C8 = ATCNO % 10; ATCNO = ATCNO / 10;
                C9 = ATCNO % 10; ATCNO = ATCNO / 10;
                Q1 = ((10 - ((((C1 + C3 + C5 + C7 + C9) * 3) + (C2 + C4 + C6 + C8)) % 10)) % 10);
                Q2 = ((10 - (((((C2 + C4 + C6 + C8) + Q1) * 3) + (C1 + C3 + C5 + C7 + C9)) % 10)) % 10);
 
                returnvalue = ((BTCNO * 100) + (Q1 * 10) + Q2 == TcNo);
            }
           
 
            if (returnvalue)
                Console.WriteLine("Doğru");
            else
                Console.WriteLine("Yanlış");
            Console.ReadKey();
        }
    }