Bölümler | Kategoriler | Konular | Üye Girişi | İletişim


T.C. Kimlik No Algoritması

Sizlerlede paylaşmak istedim arkadaşlar

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.

[list]
[*]* 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.

[/list]

C# Bilen arkadaşlar için
Birkaç link ötesinde de şu kodlara rastladım
C#
[code]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;
}

[/code]
VB
[code]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
[/code]

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.
[code]Function TcDogrulaV2(ByVal tcKimlikNo As String) As Boolean
Dim returnvalue As Boolean = False
If (tcKimlikNo.Length <> 11) Then
tcCustom.ErrorMessage = "
TC Kimlik Numarası 11 Haneli Olmalıdır."
Return returnvalue
End If
Dim TcNo As Long = Long.Parse(tcKimlikNo)
Dim BTCNO As Long = Long.Parse(Left(tcKimlikNo, 9))

Dim C1 As Long = Long.Parse(Mid(tcKimlikNo, 1, 1))
Dim C2 As Long = Long.Parse(Mid(tcKimlikNo, 2, 1))
Dim C3 As Long = Long.Parse(Mid(tcKimlikNo, 3, 1))
Dim C4 As Long = Long.Parse(Mid(tcKimlikNo, 4, 1))
Dim C5 As Long = Long.Parse(Mid(tcKimlikNo, 5, 1))
Dim C6 As Long = Long.Parse(Mid(tcKimlikNo, 6, 1))
Dim C7 As Long = Long.Parse(Mid(tcKimlikNo, 7, 1))
Dim C8 As Long = Long.Parse(Mid(tcKimlikNo, 8, 1))
Dim C9 As Long = Long.Parse(Mid(tcKimlikNo, 9, 1))

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)
'Response.Write((((BTCNO * 100) + (Q1 * 10)) + Q2) & " - ")
'Response.Write(tcKimlikNo)
If ((((BTCNO * 100) + (Q1 * 10)) + Q2) = TcNo) Then
tcCustom.ErrorMessage = ""
Else
tcCustom.ErrorMessage = "
Hatalı TC Kimlik Numarası."
End If

Return ((((BTCNO * 100) + (Q1 * 10)) + Q2) = TcNo)
End Function

[/code]

124 İnceleme 0 cevap...
::)
interesting...

siz bilgisayar dünyası ile haşır neşir olduğunuz için size ilginç gelebilir !

ama normal bir vatandaş düşünür;bunun bana ne faydası var?

günlük hayatta ne işime yarar,

T.C. kimlik numaram var mı yok mu ona bakar ::)

bu yazılara bakıp hiçbirşey anlayamayan binlerce insan var kıymetli kardeşim.............

:D
aynen :)

Hımm gerçekten ilaç gibi. Üyeliklerde TC kimlik nosu gerekli oldugunda doğrulatmak gerekiyordu :))

Bu da basit bir PHP kodu, işlemlere göre geliştirilebilir

[code]
# www.ihya.org PHP kimlik doğrulama kodu
# bu kodu kullanmak isteyen kişiler kaynak belirtmek zorundadır!
# 18 ocak 2010 - denizli ihya.org - hanci.org


function dogrula($no){
$no = (int)$no;
# www.ihya.org PHP kimlik doğrulama kodu
# bu kodu kullanmak isteyen kişiler kaynak belirtmek zorundadır!

echo "

$no

";
if (strlen($no)!=11){
echo "Kimlik no 11 haneli ve rakamlardan oluşmalı";return 0;
}
$tekler = substr($no,0,1) + substr($no,2,1) + substr($no,4,1) + substr($no,6,1) + substr($no,8,1);
$ciftler = substr($no,1,1) + substr($no,3,1) + substr($no,5,1) + substr($no,7,1);
$on = (($tekler*7)-$ciftler)%10;
if ($on !=substr($no,9,1)) {
echo "10 hane uyusmuyor.."; return 0;
}

$onbir = ($tekler + $ciftler + $on)%10;

if ($onbir !=substr($no,10,1)) {
echo "11 hane uyusmuyor.."; return 0;
}

return 1;

}

[/code]

bir de bunun üret kısmı var vermiyek bari

peki ilk 9 hanenin algoritması nedir?

bakınız .....

teorim doğru dimek ! ::)

konuya sizin istediğiniz gibi yaklaşıp soru soranlar bilem var....

site sahibi sn. bozdoğan... :)

konu ile ilgilenen ya da böyle bir koda ihtiyacı olanlar bakacaktır :)

:D demekki böyle birşey yazmak lazımmış :D
araştırmak lazım


Teknolojik Araştırmalar ve Haberler

MollaCami.Com