• 3 Aralık 2020 03:36

Sait ORHAN

Öğretmek için Öğrenin- Öğrenmek için Öğretin

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

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

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