Basit bir şekilde girilen 11 haneli T.C. kimlik numarasının doğrulaması şu algoritma sayesinde yapılabilir:

  1. 11 hanelidir.
  2. Her hanesi rakamsal değer içerir.
  3. İlk hane 0 olamaz.
  4. 1. 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 Mod10′u bize 10. haneyi verir.
  5. 1. 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.

Bunu kontrol etmeniz için gerekli fonksiyonlar ise:

C#

public static bool TcDogrulaV2(string tcKimlikNo)
{
    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);
    }
    return returnvalue;
}

VB

Public Shared Function TcDogrulaV2(ByVal tcKimlikNo As String) As Boolean
     Dim returnvalue As Boolean = False
     If (tcKimlikNo.Length <> 11) Then
         Return returnvalue
     End If
     Dim TcNo As Long = Long.Parse(tcKimlikNo)
     Dim ATCNO As Long = (TcNo / 100)
     Dim BTCNO As Long = (TcNo / 100)
     Dim C1 As Long = (ATCNO Mod 10)
     ATCNO = (ATCNO / 10)
     Dim C2 As Long = (ATCNO Mod 10)
     ATCNO = (ATCNO / 10)
     Dim C3 As Long = (ATCNO Mod 10)
     ATCNO = (ATCNO / 10)
     Dim C4 As Long = (ATCNO Mod 10)
     ATCNO = (ATCNO / 10)
     Dim C5 As Long = (ATCNO Mod 10)
     ATCNO = (ATCNO / 10)
     Dim C6 As Long = (ATCNO Mod 10)
     ATCNO = (ATCNO / 10)
     Dim C7 As Long = (ATCNO Mod 10)
     ATCNO = (ATCNO / 10)
     Dim C8 As Long = (ATCNO Mod 10)
     ATCNO = (ATCNO / 10)
     Dim C9 As Long = (ATCNO Mod 10)
     ATCNO = (ATCNO / 10)
     Dim Q1 As Long =((10-(((((((C1+C3)+C5)+C7)+C9)*3)+(((C2+C4)+C6)+C8))Mod 10))Mod 10)
     Dim Q2 As Long =((10-(((((((C2+C4)+C6)+C8)+Q1)*3)+((((C1+C3)+C5)+C7)+C9))Mod 10))Mod 10)
     Return ((((BTCNO * 100) + (Q1 * 10)) + Q2) = TcNo)
End Function

Kaynak: Kodaman.org