Jump to content

T.c Numaralarınızın Son 2 Rakamını Bulun.algoritma


BeNefSE
 Share

Recommended Posts

[font="Arial Black"][size="2"][b]Adamın biri aramış bulmuş bana denk geldi, yazayım istedim.
Denemelerimde olumlu sonuç veriyor.

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.

[/b][/size][/font]

[b]Kaynak kodları da var bu algoritmanın bir projede kullanmak isteyen arkadaş olursa paylaşabilirim...[/b] Edited by BeNefSE
Link to comment
Share on other sites

[quote name='ReaLyMaN' date='01 January 2012 - 21:16 ' timestamp='1325445407' post='1134718']
Abi zahmet olmazsa öm atar mısın?Yarın bakıyım.Karnımın ağrısından duramıyorum şimdi de :(
[/quote]
WCye git rahatla :)
Herşeyin hava olduğunu anlayacaksın :)

Link to comment
Share on other sites

[b][size="2"][font="Arial Black"]Projelerde kullanmak isteyen arkadaşlaar için kaynak kodlar...[/font][/size][/b]

[b][size="2"][font="Arial Black"]C*
[spoiler]
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;
}
[/spoiler]
VB
[spoiler]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
[/spoiler]
VB
[spoiler]
Function TcDogrulaV2(ByVal tcKimlikNo As String) As Boolean
Dim returnvalue As Boolean = False
If (tcKimlikNo.Length <> 11) Then
tcCustom.ErrorMessage = "<br />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 = "<br />Hatalı TC Kimlik Numarası."
End If

Return ((((BTCNO * 100) + (Q1 * 10)) + Q2) = TcNo)
End Function
[/spoiler]

[spoiler]
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);
}

[/spoiler]
[/font][/size][/b]

Link to comment
Share on other sites

[quote name='ATTACK_09' date='01 January 2012 - 23:26 ' timestamp='1325453219' post='1134783']
denedim olmadı yanlışmı die bi daha denedim gene olmadı
[/quote]
Bir yerde hata yapmış olabilirsin ben denedim sonuç olumlu deneyen arkadaşlarda var.İlk denememde bende de olmamıştı rakamların yerini karıştırmıştım...

Link to comment
Share on other sites

Şimdi baktım ve yöntem doğru. Guili Autoit kodlarıda benden olsun :)

[b]Autoit Code:[/b]
[codebox]#NoTrayIcon

_TC_FOUND()

Func _TC_FOUND()
Local $Form1 = GUICreate("TC Kimlik Numarasının Son Iki Rakamını", 300, 110)
Local $Group1 = GUICtrlCreateGroup("TC Kimlik Numarasının 8 hanesini giriniz", 10, 10, 280, 60)
Local $Input1 = GUICtrlCreateInput("", 20, 35, 240, 20,0x2000)
GUICtrlSetLimit(-1,9,9)
Local $Label = GUICtrlCreateLabel("??", 265, 37, 20, 20)
Local $Button1 = GUICtrlCreateButton("Son iki rakamını Hesapla", 10, 80, 280, 20)
Local $FoundTc

GUISetState(@SW_SHOW)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
Case $Button1
$FoundTc = _TC_CALC(StringStripWS(GUICtrlRead($Input1),8),$Form1)
If @error = 0 Then
GUICtrlSetData($Label,$FoundTc)
ContinueLoop
EndIf
GUICtrlSetData($Label,"??")
GUICtrlSetData($Input1,"")
GUICtrlSetState($Input1,256)

EndSwitch
WEnd
EndFunc

Func _TC_CALC($Number,$hwnd = 0)
If StringLen($Number) <> 9 Then
MsgBox(64,"Hata!","TC kimlik muarası hatalı girilimiş!",0,$hwnd)
Return SetError(1,0,"")
EndIf

Local $StringSplit = StringSplit($Number,"",1)

;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.
Local $FoundN1 = ($StringSplit[1] + $StringSplit[3] + $StringSplit[5] + $StringSplit[7] + $StringSplit[9]) * 7
$FoundN1 = Mod($FoundN1 - ($StringSplit[2] + $StringSplit[4] + $StringSplit[6] + $StringSplit[8]),10)

;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.
Local $FoundN2 = Mod($StringSplit[1] + $StringSplit[2] + $StringSplit[3] + $StringSplit[4] + _
$StringSplit[5] + $StringSplit[6] + $StringSplit[7] + $StringSplit[8] + $StringSplit[9] + $FoundN1,10)

MsgBox(64,"","TC Kimlik numarasının son iki rakamı=" & $FoundN1 & $FoundN2,0,$hwnd)
Return $FoundN1 & $FoundN2
EndFunc[/codebox]

Edited by blue_life
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...