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.
CREATE FUNCTION [dbo].[KIMLIKNO_KONTROL](@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 @SONUC 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 @SONUC = 1 ELSE SET @SONUC= 0
END
ELSE SET @SONUC = 0
RETURN @SONUC
END
Fonksiyonun kullanımına örnekler:
Bir kaydı kontrol etmek için örnek
SELECT dbo.KIMLIKNO_KONTROL AS KONTROL
Kayıt tablosunda kimlik numaraları hatalı olan kayıtları getirmek için de aşağıdaki gibi bir sorgulama yapılabilir.
SELECT * FROM TABLO_ADI WHERE dbo.KIMLIKNO_KONTROL = 0