14-02-2010, 22:02
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ı
ayrıca aynı fonksiyonu, bir tablo sütununa check constraint olarak da verebilirsiniz.
Fonksiyonun Kodu
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
- SELECT dbo.Fn_TcNoDogrumu(22879614234)
ayrıca aynı fonksiyonu, bir tablo sütununa check constraint olarak da verebilirsiniz.
Fonksiyonun Kodu
SQL
- CREATE FUNCTION dbo.Fn_TcNoDogrumu(@TcNo BIGINT)
- RETURNS BIT
- AS
- BEGIN
- DECLARE @ATCNO BIGINT
- DECLARE @BTCNO BIGINT
- DECLARE @C1 Tinyint
- DECLARE @C2 Tinyint
- DECLARE @C3 Tinyint
- DECLARE @C4 Tinyint
- DECLARE @C5 Tinyint
- DECLARE @C6 Tinyint
- DECLARE @C7 Tinyint
- DECLARE @C8 Tinyint
- DECLARE @C9 Tinyint
- DECLARE @Q1 INT
- DECLARE @Q2 INT
- DECLARE @R Bit
-
- SET @ATCNO = @TcNo / 100
- SET @BTCNO = @TcNo / 100
-
- IF LEN(CONVERT(VARCHAR(19),@TcNo)) = 11
- BEGIN
- SET @C1 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
- SET @C2 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
- SET @C3 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
- SET @C4 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
- SET @C5 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
- SET @C6 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
- SET @C7 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
- SET @C8 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
- SET @C9 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10
- SET @Q1 = ((10-((((@C1+@C3+@C5+@C7+@C9)*3)+(@C2+@C4+@C6+@C8)) % 10))%10)
- SET @Q2 = ((10-(((((@C2+@C4+@C6+@C8)+@Q1)*3)+(@C1+@C3+@C5+@C7+@C9))%10))%10)
-
- IF (@BTCNO * 100)+(@Q1 * 10)+@Q2 = @TcNo SET @R = 1 ELSE SET @R = 0
-
- END ELSE SET @R = 0
-
- RETURN @R
- END