Forumlar > Diğer > Konu Dışı (T.C KİMLİK NO ALGORİTMASI)
protezdiyot kullanıcısının resmi

protezdiyot

Kayıt: 03/04/2008

T.C KİMLİK NO ALGORİTMASI

Bir müşteriden inatla gelen doğrulama isteği üzerine T.C. kimlik no'sunun rakamsal olarak "kesinlikle" doğru olmadan formun validate etmemesi için ufak bir araştıma sonucunda şunu buldum.

TC Kimlik numaraları 11 basamaktan oluşmaktadır. İlk 9 basamak arasında kurulan bir algoritma bize 10. basmağı, ilk 10 basamak arasında kurulan algoritma ise bize 11. basamağı verir.
* 11 hanelidir.
* Her hanesi rakamsal değer içerir.
* İlk hane 0 olamaz.
* 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.
* 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.

Kaynak

 

Birkaç link ötesinde de şu kodlara rastladım

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
publicstaticbool 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
PublicSharedFunction TcDogrulaV2(ByVal tcKimlikNo AsString)AsBoolean
     Dim returnvalue AsBoolean=False
     If(tcKimlikNo.Length<>11)Then
         Return returnvalue
     EndIf
     DimTcNoAsLong=Long.Parse(tcKimlikNo)
     Dim ATCNO AsLong=(TcNo/100)
     Dim BTCNO AsLong=(TcNo/100)
     Dim C1 AsLong=(ATCNO Mod10)
     ATCNO =(ATCNO /10)
     Dim C2 AsLong=(ATCNO Mod10)
     ATCNO =(ATCNO /10)
     Dim C3 AsLong=(ATCNO Mod10)
     ATCNO =(ATCNO /10)
     Dim C4 AsLong=(ATCNO Mod10)
     ATCNO =(ATCNO /10)
     Dim C5 AsLong=(ATCNO Mod10)
     ATCNO =(ATCNO /10)
     Dim C6 AsLong=(ATCNO Mod10)
     ATCNO =(ATCNO /10)
     Dim C7 AsLong=(ATCNO Mod10)
     ATCNO =(ATCNO /10)
     Dim C8 AsLong=(ATCNO Mod10)
     ATCNO =(ATCNO /10)
     Dim C9 AsLong=(ATCNO Mod10)
     ATCNO =(ATCNO /10)
     Dim Q1 AsLong=((10-(((((((C1+C3)+C5)+C7)+C9)*3)+(((C2+C4)+C6)+C8))Mod10))Mod10)
     Dim Q2 AsLong=((10-(((((((C2+C4)+C6)+C8)+Q1)*3)+((((C1+C3)+C5)+C7)+C9))Mod10))Mod10)
     Return((((BTCNO *100)+(Q1 *10))+ Q2)=TcNo)
End Function
 

Kaynak

VB kodlarını kullanmak istedim ancak rakamları string olarak algılamak gibi garip bir hata ile karşılaştım. zaten yukarıda alıntı olarak belirttiğim doğrulama kurallarından farklı hata mesajları almak istediğimden VB kod üzerinde oynamalar yaparak şu hale getirdim. TcDogrulaV2 ve isNumeric(js) fonksiyonlarını kullanarak olumlu sonuç almış bulunmaktayım.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
Function TcDogrulaV2(ByVal tcKimlikNo AsString)AsBoolean
        Dim returnvalue AsBoolean=False
        If(tcKimlikNo.Length<>11)Then
            tcCustom.ErrorMessage="<br />TC Kimlik Numarası 11 Haneli Olmalıdır."
            Return returnvalue
        EndIf
        DimTcNoAsLong=Long.Parse(tcKimlikNo)
        Dim BTCNO AsLong=Long.Parse(Left(tcKimlikNo,9))
       
        Dim C1 AsLong=Long.Parse(Mid(tcKimlikNo,1,1))
        Dim C2 AsLong=Long.Parse(Mid(tcKimlikNo,2,1))
        Dim C3 AsLong=Long.Parse(Mid(tcKimlikNo,3,1))
        Dim C4 AsLong=Long.Parse(Mid(tcKimlikNo,4,1))
        Dim C5 AsLong=Long.Parse(Mid(tcKimlikNo,5,1))
        Dim C6 AsLong=Long.Parse(Mid(tcKimlikNo,6,1))
        Dim C7 AsLong=Long.Parse(Mid(tcKimlikNo,7,1))
        Dim C8 AsLong=Long.Parse(Mid(tcKimlikNo,8,1))
        Dim C9 AsLong=Long.Parse(Mid(tcKimlikNo,9,1))
       
        Dim Q1 AsLong=((10-(((((((C1 + C3)+ C5)+ C7)+ C9)*3)+(((C2 + C4)+ C6)+ C8))Mod10))Mod10)
        Dim Q2 AsLong=((10-(((((((C2 + C4)+ C6)+ C8)+ Q1)*3)+((((C1 + C3)+ C5)+ C7)+ C9))Mod10))Mod10)
        'Response.Write((((BTCNO * 100) + (Q1 * 10)) + Q2) & " - ")
        'Response.Write(tcKimlikNo)
        If((((BTCNO *100)+(Q1 *10))+ Q2)=TcNo)Then
            tcCustom.ErrorMessage=""
        Else
            tcCustom.ErrorMessage="<br />Hatalı TC Kimlik Numarası."
        EndIf
       
        Return((((BTCNO *100)+(Q1 *10))+ Q2)=TcNo)
    End Function
 

Arada ismi geçti bari atlamayayım dedim.

1
2
3
4
5
6
7
8
9
10
11
 
var isShift=false;
function keyUP(keyCode)
{
      if(keyCode==16) isShift =false;
}

function isNumeric(keyCode)
{
      if(keyCode==16) isShift =true;
      return((keyCode >=48&& keyCode <=57|| keyCode ==8||(keyCode >=96&& keyCode <=105))&& isShift ==false);
}
 
 
SpacerALINTIDIR:   http://www.kodaman.org/yazi/t-c-kimlik-no-algoritmasi
Top
martinamca kullanıcısının resmi

martinamca

Kayıt: 04/04/2009

Re: T.C KİMLİK NO ALGORİTMASI

Şu kodu görünce Guido'nun ruhuna iki kuluvallah bir elham okuyasım geldi. Smile

Top
protezdiyot kullanıcısının resmi

protezdiyot

Kayıt: 03/04/2008

Re: T.C KİMLİK NO ALGORİTMASI

Smile Biraz açarmısın martinamca Smile

Top