MSSQL üzerinde TC Numarası Doğrulama Fonksiyonu
Her icad iş başa düşünce ortaya çıkarmış misali, elimdeki binlerce kimlik verisinin veritabanı üzerinde sorgulanması ve kontrolü aşamasında TC numaraları için bu güne kadar 2 kontrol tekniğimiz vardı
- TC numarası kolonundaki veri BOŞ mu?
- TC numarası kolonundaki veri 11 karakter mi?
peki ama ya oradaki veri 11 karakterli olduğu halde hatalı yazılmışsa? O zaman bu bilginin doğru olduğunu nasıl anlayacağız?
Bu soru üzerine oturdum MSSQL üzerinde aşağıdaki fonksiyonu yazdım.
Bu fonksiyon sayesinde basit bir Select cümleciği ile tüm tablo sorgulanarak hatalı kayıtlara ulaşılabiliniyor.
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: Burak ŞEKERCİOĞLU -- Create date: 23.01.2012 -- Description: TC Numarası Doğrulama Fonksiyonu -- ============================================= alter FUNCTION fn_tcdogrula ( @tcno as nvarchar(11) ) RETURNS int AS BEGIN declare @bilgi10 bit declare @bilgi11 bit declare @karakter int declare @tek int declare @cift int declare @cikti int declare @basamak10 int declare @basamak11 int declare @tum int declare @sonuc bit set @tek=0 set @cift=0 set @karakter=0 set @sonuc=0 set @cikti=0 set @basamak10=0 set @basamak11=0 set @tum=0 WHILE (@karakter<9) begin set @karakter=@karakter +1 if (@karakter % 2=1 ) begin set @tek = @tek + cast(substring(@tcno,@karakter,1) as int) end if (@karakter % 2=0) begin set @cift=@cift + cast(substring(@tcno,@karakter,1) as int) end end set @cikti=(@tek * 7 ) - @cift set @basamak10=@cikti % 10 if (@basamak10 = cast(substring(@tcno,10,1) as int)) begin set @bilgi10=1 end set @karakter=0 while (@karakter<10) begin set @karakter=@karakter +1 set @tum=@tum + cast(substring(@tcno,@karakter,1) as int) end set @basamak11=@tum % 10 if (@basamak11 = cast(substring(@tcno,11,1) as int)) begin set @bilgi11=1 end if (@bilgi10=1 and @bilgi11=1) begin set @sonuc=1 end return @sonuc END GO
Örnek Kullanım:
Select kisino, tcnumarasi from kimlikler where fn_tcdogrula(tcnumarasi)=0
bu komut ile kimlikler tablosunda tcnumarası hatalı olan kişileri listeler.