Hatalı TC Kimlikno bulan MS SQL Scaler fonksiyonu
#1
Merhaba Arkadaşlar,
Aşağıdaki harika SQL skaler fonksiyonu verivizyon.com aldım,
Geçenlerde gördüm ve çok dikkatimi çekti. 15000 kayıt üzerinde test ettim ve sonuç şaşırtıcı idi hatılı TC Kimlik nolarını ayıkladı.
Tekrar verivizyondan Abdullah Hocama teşekkür ediyorum ve aynen aktarıyorum.

TC Kimlik No Doğrulama Algoritmasının T-SQL ile gerçekleştireceğiz.
Hepimiz bir şekilde veritabanımızda personel, müşteri gibi şahıs bilgilerinin tutulduğu tablolar yapmışızdır. Peki, bu tablolardaki TC Kimlik No alanına aldığımız değerler gerçekten doğru mu? Veya böylesine önemli bir bilgiyi kullanıcılar el çabukluğuyla yanlış mı girdiler. İşte bu makalede TC Kimlik No bilgisinin doğru olup olmadığını test eden fonksiyonu tanıyacağız.

Bildiğimiz gibi TC NO kimlik numarası 11 karakterli sayısal bir değerdir. Ve bir benzeri asla yoktur. TC Kimlik No bilgilerimiz aslında rasgele oluşturulmuş, düzensiz rakamlar değillerdir. Belli bir algoritma ile bu verilerin doğruluğunu test edebiliriz.

Bu fonksiyon ile sadece TC No bilgisinin doğru girilip girilmediği kontrol edilir. Fonksiyonun kullanımı gayet basit. Sadece TC NO kimlik numarasını bigint tipinde sayısal olarak alıyor ve yerine Boolean tipinde olan bit değerini döndürüyor. Eğer doğruysa 1 yanlışsa 0 değerini döndürüyor. Bu fonksiyon sayesinde İlgili tabloda bir Trigger oluşturup kaydedilmek istenen TC NO değeri kontrol edilip hatalı ise işlem durdurulabilir.

Fonksiyonun Kullanımı
SQL
  1. SELECT dbo.Fn_TcNoDogrumu(22879614234)



ayrıca aynı fonksiyonu, bir tablo sütununa check constraint olarak da verebilirsiniz.

Fonksiyonun Kodu
SQL
  1. CREATE FUNCTION dbo.Fn_TcNoDogrumu(@TcNo BIGINT)
  2. RETURNS BIT
  3. AS
  4. BEGIN
  5. DECLARE @ATCNO BIGINT
  6. DECLARE @BTCNO BIGINT
  7. DECLARE @C1 Tinyint
  8. DECLARE @C2 Tinyint
  9. DECLARE @C3 Tinyint
  10. DECLARE @C4 Tinyint
  11. DECLARE @C5 Tinyint
  12. DECLARE @C6 Tinyint
  13. DECLARE @C7 Tinyint
  14. DECLARE @C8 Tinyint
  15. DECLARE @C9 Tinyint
  16. DECLARE @Q1 INT
  17. DECLARE @Q2 INT
  18. DECLARE @R Bit
  19.  
  20. SET @ATCNO = @TcNo / 100
  21. SET @BTCNO = @TcNo / 100
  22.  
  23. IF LEN(CONVERT(VARCHAR(19),@TcNo)) = 11
  24. BEGIN
  25. SET @C1 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
  26. SET @C2 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
  27. SET @C3 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
  28. SET @C4 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
  29. SET @C5 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
  30. SET @C6 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
  31. SET @C7 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
  32. SET @C8 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
  33. SET @C9 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
  34. SET @Q1 = ((10-((((@C1+@C3+@C5+@C7+@C9)*3)+(@C2+@C4+@C6+@C8)) % 10))%10)
  35. SET @Q2 = ((10-(((((@C2+@C4+@C6+@C8)+@Q1)*3)+(@C1+@C3+@C5+@C7+@C9))%10))%10)
  36.  
  37. IF (@BTCNO * 100)+(@Q1 * 10)+@Q2 = @TcNo SET @R = 1 ELSE SET @R = 0
  38.  
  39. END ELSE SET @R = 0
  40.  
  41. RETURN @R
  42. END





  Alıntı
Bu mesajı beğenenler:
#2
Seneler önce aynı uygulamayı access te de yaptım.

Kullandığım fonksiyon.

Visual Basic
  1. Public Function dogrula(kimlikNo As String) As String
  2.  
  3. Dim x, Top1, Top2, H1, H2 As Integer
  4. ReDim A(11) As Variant
  5.  
  6. If Len(kimlikNo) <> 11 Then
  7. MsgBox "TC Kimlik No 11 Haneli olmalıdır", vbCritical, "UYARI"
  8. dogrula = "Yanlış veri"
  9. Exit Function
  10. End If
  11.  
  12. For x = 0 To 10
  13. A(x) = CInt(Mid(kimlikNo, x + 1, 1))
  14. Next x
  15.  
  16. Top1 = 3 * (A(0) + A(2) + A(4) + A(6) + A(8)) + (A(1) + A(3) + A(5) + A(7))
  17.  
  18. H1 = 10 - Top1 Mod 10
  19.  
  20. If H1 = 10 Then H1 = 0
  21.  
  22. Top2 = (A(0) + A(2) + A(4) + A(6) + A(8)) + 3 * (A(1) + A(3) + A(5) + A(7) + H1)
  23.  
  24. H2 = 10 - Top2 Mod 10
  25.  
  26. If H2 = 10 Then H2 = 0
  27.  
  28. If H1 = A(9) And H2 = A(10) Then
  29. dogrula = "Doğru TC Kimlik No"
  30. Else
  31. dogrula = "Yanlış TC Kimlik No"
  32. End If
  33.  
  34.  
  35. End Function



Umarım yararlı olur.

İyi çalışmalar


Eklenti Dosyaları
.rar   TC_kimlik_doğrulama.rar (Boyut: 11,15 KB / İndirilme: 60)



  Alıntı
Bu mesajı beğenenler:
#3
Sayın Modalı Hocam,
Çok teşekkür ederim.
Böylece hem sql fonksiyonu hemde vb fonksiyonu ile çözüm üretme şansımız oldu.
Saygılarımla.



  Alıntı
Bu mesajı beğenenler:
#4
Sayın Modalı..

Bu güzel çalışma ve paylaşımınız için teşekkürler..



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  Plaka Düzenleme Fonksiyonu monelogg 3 2.924 27-05-2014, 11:25
Son Mesaj: monelogg
  Rakam okuma SQL scaler fonksiyonu metinse 3 3.824 28-03-2010, 00:21
Son Mesaj: MADMAX
  Yazıların ilk harfleri büyük diğerlerini küçük yapan SQL Scaler Fonksiyon metinse 4 14.710 14-02-2010, 17:32
Son Mesaj: beab05

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi