Forum

Kimlik Numarası Doğ...
 
Bildirimler
Hepsini Temizle

[Çözüldü] Kimlik Numarası Doğrulama (T-SQL)

3 Yazılar
2 Üyeler
0 Reactions
2,479 Görüntüleme
Sait ORHAN
(@saitorhan)
Gönderiler: 46
Trusted Member
Konu başlatıcı
 

Kimlik numarası 11 haneli bir numaradır ve her basamağı belli bir algoritmaya göre belirleniyor. Aşağıdaki T-SQL fonksiyonu ile girilen kimlik numarasının bu algoritmaya uyup uymadığı tespit edilebilir.

 

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 

 

Fonksiyonu tanımladıktan sonra aşağıdaki gibi çağrılabilir.

Manuel olarak verilen Kimlik no kontrolü
SELECT dbo.[KIMLIKNO_KONTROL](12345678911) AS KONTROL
Kontrol olarak adlandırdıgımız alan, Doğru ise 1 Yanlış ise 0 değeri döner. 
Bir tabloda olan tüm kimlik numaralarının kontrolü için
SELECT dbo.[KIMLIKNO_KONTROL](TCNO_ALAN) AS KONTROL FROM TABLO_ADI

 

---------
Sait ORHAN
Bilgisayar Mühendisi
Web: http://saitorhan.com

 
Gönderildi : 21/02/2020 16:55

Hakan Uzuner
(@hakanuzuner)
Gönderiler: 33311
Illustrious Member Yönetici
 

Eline sağlık

Danışman - ITSTACK Bilgi Sistemleri
****************************************************************
Probleminiz Çözüldüğünde Sonucu Burada Paylaşırsanız.
Sizde Aynı Problemi Yaşayanlar İçin Yardım Etmiş Olursunuz.
Eğer sorununuz çözüldü ise lütfen "çözüldü" olarak işaretlerseniz diğer üyeler için çok büyük kolaylık sağlayacaktır.
*****************************************************************

 
Gönderildi : 23/02/2020 15:17

Sait ORHAN
(@saitorhan)
Gönderiler: 46
Trusted Member
Konu başlatıcı
 

@hakanuzuner

Teşekkür ederim

 

---------
Sait ORHAN
Bilgisayar Mühendisi
Web: http://saitorhan.com

 
Gönderildi : 24/02/2020 08:48

Paylaş: