Sql İle Kimlik No Kontrol

Kişi kaydı bulunan bilgi sistemlerinin hemen hemen hepsinin en önemli alanı kimlik numarasıdır. Kimlik numaraları de rastgele oluşturulmuş bir sayı değil de belli bir algoritmaya göre oluşturulmuş bir numaradır.

Aşağıdaki sql fonksiyonun kullanarak sisteminize kaydedilen kayıtların uygun kayıtlar olup olmadığını sorgulayabilirsiniz. Bir fikir olarak mesela, tabloya yazılacak bir trigger ile bütün kayıtlar otomatik olarak sorgulanabilir.

</p>
<p>CREATE FUNCTION [dbo].[KIMLIKNO_KONTROL](@TcNo Bigint)</p>
<p>RETURNS BIT</p>
<p>AS</p>
<p>BEGIN</p>
<p>DECLARE @ATCNO Bigint</p>
<p>DECLARE @BTCNO Bigint</p>
<p>DECLARE @C1    Tinyint</p>
<p>DECLARE @C2    Tinyint</p>
<p>DECLARE @C3    Tinyint</p>
<p>DECLARE @C4    Tinyint</p>
<p>DECLARE @C5    Tinyint</p>
<p>DECLARE @C6    Tinyint</p>
<p>DECLARE @C7    Tinyint</p>
<p>DECLARE @C8    Tinyint</p>
<p>DECLARE @C9    Tinyint</p>
<p>DECLARE @Q1    Int</p>
<p>DECLARE @Q2    Int</p>
<p>DECLARE @SONUC Bit</p>
<p>SET @ATCNO = @TcNo / 100</p>
<p>SET @BTCNO = @TcNo / 100</p>
<p>IF LEN(CONVERT(VARCHAR(19),@TcNo)) = 11</p>
<p>BEGIN</p>
<p>SET @C1 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10</p>
<p>SET @C2 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10</p>
<p>SET @C3 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10</p>
<p>SET @C4 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10</p>
<p>SET @C5 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10</p>
<p>SET @C6 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10</p>
<p>SET @C7 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10</p>
<p>SET @C8 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10</p>
<p>SET @C9 = @ATCNO % 10 SET @ATCNO = @ATCNO / 10</p>
<p>SET @Q1 = ((10-((((@C1+@C3+@C5+@C7+@C9)*3)+(@C2+@C4+@C6+@C8)) %10))%10)</p>
<p>SET @Q2 = ((10-(((((@C2+@C4+@C6+@C8)+@Q1)*3)+(@C1+@C3+@C5+@C7+@C9))%10))%10)</p>
<p>IF (@BTCNO * 100)+(@Q1 * 10)+@Q2 = @TcNo SET @SONUC = 1 ELSE SET @SONUC= 0</p>
<p>END</p>
<p>ELSE SET @SONUC = 0</p>
<p>RETURN @SONUC</p>
<p>END</p>
<p>

 

Fonksiyonun kullanımına örnekler:

Bir kaydı kontrol etmek için örnek

</p>
<p>SELECT dbo.[KIMLIKNO_KONTROL](12345678911) AS KONTROL</p>
<p>

 

Kayıt tablosunda kimlik numaraları hatalı olan kayıtları getirmek için de aşağıdaki gibi bir sorgulama yapılabilir.

</p>
<p>SELECT * FROM TABLO_ADI WHERE dbo.[KIMLIKNO_KONTROL](TCNO_ALAN) = 0</p>
<p>

Yorum Yapın

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Proudly powered by WordPress | Theme: Baskerville 2 by Anders Noren.

Up ↑

%d blogcu bunu beğendi: