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.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- 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 intASBEGINdeclare @bilgi10 bitdeclare @bilgi11 bitdeclare @karakter intdeclare @tek intdeclare @cift intdeclare @cikti intdeclare @basamak10 intdeclare @basamak11 intdeclare @tum intdeclare @sonuc bitset @tek=0set @cift=0set @karakter=0set @sonuc=0set @cikti=0set @basamak10=0set @basamak11=0set @tum=0WHILE (@karakter<9)beginset @karakter=@karakter +1if (@karakter % 2=1 )beginset @tek = @tek + cast(substring(@tcno,@karakter,1) as int)endif (@karakter % 2=0)beginset @cift=@cift + cast(substring(@tcno,@karakter,1) as int)endendset @cikti=(@tek * 7 ) - @ciftset @basamak10=@cikti % 10if (@basamak10 = cast(substring(@tcno,10,1) as int))beginset @bilgi10=1endset @karakter=0while (@karakter<10)beginset @karakter=@karakter +1set @tum=@tum + cast(substring(@tcno,@karakter,1) as int)endset @basamak11=@tum % 10if (@basamak11 = cast(substring(@tcno,11,1) as int))beginset @bilgi11=1endif (@bilgi10=1 and @bilgi11=1)beginset @sonuc=1endreturn @sonucENDGO
Örnek Kullanım:
1 | Select kisino, tcnumarasi from kimlikler where fn_tcdogrula(tcnumarasi)=0 |
bu komut ile kimlikler tablosunda tcnumarası hatalı olan kişileri listeler.