TC no algoritması ve kontrol

1 2
25/03/2012, 17:19

accessman

bir yerde şu kodu buldum
accesse nasıl uyarlanır bu vb içinmiş
Kod:
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
[/vb][vb]
25/03/2012, 17:37

accessman

bir de bu var ama bunları nasıl kullanacağım
Kod:
Private Function tcknkontrol(tckn As Double)
    Dim dizi(1 To 9) As Integer
    gecici = Int(tckn / 100)
    gecici2 = Int(tckn / 100)

    For i = 9 To 1 Step -1
        dizi(i) = gecici2 Mod 10
        gecici2 = Int(gecici2 / 10)
    Next i

    deg1 = dizi(9) + dizi(7) + dizi(5) + dizi(3) + dizi(1)
    deg2 = dizi(8) + dizi(6) + dizi(4) + dizi(2)
    toplam = deg1 * 3 + deg2
    kontrol1 = (10 - (toplam Mod 10)) Mod 10

    deg1 = kontrol1 + dizi(8) + dizi(6) + dizi(4) + dizi(2)
    deg2 = dizi(9) + dizi(7) + dizi(5) + dizi(3) + dizi(1)
    toplam = deg1 * 3 + deg2
    kontrol2 = (10 - (toplam Mod 10)) Mod 10

    gecici = gecici * 100 + kontrol1 * 10 + kontrol2
    If gecici = tckn Then tcknkontrol = True Else tcknkontrol = False
End Function

Private Function rastgelets(altsinir, ustsinir As Double) As Double
    Randomize
    rastgelets = Int((ustsinir - altsinir + 1) * Rnd + altsinir)
End Function

Private Sub Form_Load()
    Form1.Visible = False
    Dim a As Double
    a = 10000000000#
    While tcknkontrol(a) = False
        DoEvents
        a = rastgelets(10000000000#, 99999999999#)
    Wend
    Clipboard.Clear
    Clipboard.SetText a
    MsgBox a & " - Numara panoya kopyalandı, kullanmak için : ctrl+v", vbInformation, "Geçerli bir TC kimlik no bulundu"
    End
End Sub


tc kontrol.rar
25/03/2012, 17:51

ozanakkaya

Aşağıdaki linki inceleyiniz.



Tc Kimlik Numarası Kontrolü


Kullanılan kod:

Function TCKimlikNoYazimKontrol(tcid) As Boolean
Dim D(1 To 11) As Integer
For N = 1 To 11
D(N) = Mid(tcid, N, 1)
Next
top1 = D(1) + D(3) + D(5) + D(7) + D(9)
top2 = D(2) + D(4) + D(6) + D(8)

cd1 = (10 - (((3 * top1) + top2) Mod 10)) Mod 10
cd2 = (10 - (((3 * (top2 + cd1)) + top1) Mod 10)) Mod 10
If cd1 = D(10) And cd2 = D(11) Then
TCKimlikNoYazimKontrol = True
Else
TCKimlikNoYazimKontrol = False
End If
End Function
25/03/2012, 18:06

accessman

çok teşekkürler admin

elimde 6500 tane tc olan hasta listem var
bunların hepsi gerçek tc no
tablo adı --> "KIMLIKNO"
alan adı --> "TCNO"
alan adı --> "SUNUC"
Bu tabloyu baştan itibaren tüm numaraları kontrol ettirebilirmiyim
Tabloyu tarayacak
sonuç alanına da evet veya hayır yazacak
nasıl yapabilirim

25/03/2012, 18:16

mehmetdemiral

Döngü kullanarak yapabilirsiniz. Önce kayıt sayısı bulunacak, sonra da 1 den son sayıya kadar tarayan bir döngü kullanbarak, form üzerinde görsel olarak da yapabilirsiniz. Ben bugün içinde zaman bulduğumda böyle bir çalışma hazırlarım size.
25/03/2012, 18:50

accessman

hani ado ile kayıt açılıp işlem uygulanıp sonucuna göre tabloya ekleniyordu
ama maalesef kod bilmediğim için düzgün bile anlatamıyorum
1 2