Bu yazıyı exceltr.net altında okumak için tıklayın
Merhaba,
Bu yazıda size TC Kimlik numarası için bir iki basit kontrol yöntemi göstereceğim.
Sınamadan kastım resmi makamlarla bağlantı kurarak sınamak değil tabii ki. Her TC Kimlik numarasının sağladığı basit birkaç matematiksel şart var.
Bu şartlara bakarak bir sayının TC Kimlik numarası olup olamayacağını görebilirsiniz. Fakat tabii ki ilgili şartları sağlayan her sayı, bir şahsa verilmiş TC Kimlik no değildir. Biz algoritmaya uymayanları eliyoruz.
Peki ne derecede işimize yarar bu algoritma? Kafadan uydurulmuş bir numara çoook büyük olasılıkla testi geçemez. Bir iki rakamı hatalı verilmiş gerçek bir TC Kimlik numarası da çok küçük bir olasılıkla algoritmayı geçecek şansa sahip olabilir. Özellikle veri girişi hatalarını önemli ölçüde azaltacaktır.
Lafı fazla uzatmadan algoritmayı kısaca anlatayım ve fonksiyonu vereyim:
Fonksiyona, TCKimlik numarası olup olmadığı kontrol edilmek istenen sayı, string olarak veriliyor (string olacak tabii. sebebini sormayın)
TCKimlik numarası 11 haneli olmalıdır
TCKimlik numarasının son hanesi tek sayı olamaz
TCKimlik numarasının ilk 10 rakamının toplamının 10 a bölümünden kalan sayı, 11. rakamı verir
bir iki şartı daha var ama fonksiyonda yok. Talep gelirse eklerim
Ayrıca fonksiyonun altında bir de yardımcı fonksiyon var. onun amacı da stringin içinde dışında boşluklar var ise onları kırpmak. böylece temiz bir string oluşturmuş oluruz.
tc kimlik test:
Private Function TCKimlikSinama(strTc As String) As Boolean
' Programcı: Ebubekir Çelik .
' https://exceltr.wordpress.com
TCKimlikSinama = True
If Len(strTc) = 0 Then
TCKimlikSinama = True
Exit Function
End If
If Len(strTc) 11 Then
TCKimlikSinama = False
Exit Function
End If
Dim iTop As Integer, i As Integer
iTop = 0
For i = 1 To 10
iTop = iTop + CInt(Mid(strTc, i, 1))
Next
If iTop Mod 10 CInt(Right(strTc, 1)) Then
TCKimlikSinama = False
Exit Function
End If
If CInt(Right(strTc, 1)) Mod 2 = 1 Then
TCKimlikSinama = False
Exit Function
End If
End Function
metin içerisindeki boşluk karakterlerini kırpmak için :
Function BoslukKirp(str As String) As String
Dim i As Integer
Dim strKr As String, strLeft As String, strRight As String
Dim strBosluk As String
Dim iLngt As Integer
strBosluk = " "
strLeft = ""
strRight = ""
iLngt = Len(str)
If Len(str) > 0 Then
For i = 2 To iLngt
If Mid(str, i, 1) = strBosluk Then
strLeft = Left(str, i - 1)
strRight = Mid(str, i + 1)
str = strLeft & strRight
iLngt = iLngt - 1
End If
Next
End If
BoslukKirp = str
End Function