Bu algoritmaya göre T.C. Kimlik numarası kontrolünün faydalarına gelecek olursak kullanıcılar genelde gerçek T.C. Kimlik numaralarını paylaşmamak için 11111111111, 12345678901 şeklinde rakamsal değer girip formlardaki alanları geçebilir yada tabiri caiz ise rakamları sallayabilir bu algoritma ile kullanıcının gerçek bir T.C. Kimlik numarası girmek zorunda bırakılıyor.
C# Methodu
public
static
bool
TcDogrula(
string
tcKimlikNo)
{
returnvalue =
false
;
if
(tcKimlikNo.Length == 11)
Int64 ATCNO, BTCNO, TcNo;
long
C1,C2,C3, C4, C5,C6,C7,C8, C9,Q1,Q2;
TcNo = Int64.Parse(tcKimlikNo);
ATCNO = TcNo / 100;
BTCNO = TcNo / 100;
C1 = ATCNO % 10;
ATCNO = ATCNO / 10;
C2 = ATCNO % 10;
C3 = ATCNO % 10;
C4 = ATCNO % 10;
C5 = ATCNO % 10;
C6 = ATCNO % 10;
C7 = ATCNO % 10;
C8 = ATCNO % 10;
C9 = ATCNO % 10;
Q1 = ((10-((((C1+C3+C5+C7+C9)*3)+(C2+C4+C6+C8))%10))%10);
Q2 = ((10-(((((C2+C4+C6+C8)+Q1)*3)+(C1+C3+C5+C7+C9))%10))%10);
returnvalue = ((BTCNO * 100)+(Q1 * 10)+Q2 == TcNo);
}
return
returnvalue;
SQL Fonksiyonu
CREATE
FUNCTION
[dbo].[TckNoVerification](@TcNo
Bigint
)
RETURNS
BIT
AS
BEGIN
DECLARE
@ATCNO
@BTCNO
@C1 Tinyint
@C2 Tinyint
@C3 Tinyint
@C4 Tinyint
@C5 Tinyint
@C6 Tinyint
@C7 Tinyint
@C8 Tinyint
@C9 Tinyint
@Q1
Int
@Q2
@R
Bit
SET
@ATCNO = @TcNo / 100
@BTCNO = @TcNo / 100
IF LEN(
CONVERT
(
VARCHAR
(19),@TcNo)) = 11
@C1 = @ATCNO % 10
@ATCNO = @ATCNO / 10
@C2 = @ATCNO % 10
@C3 = @ATCNO % 10
@C4 = @ATCNO % 10
@C5 = @ATCNO % 10
@C6 = @ATCNO % 10
@C7 = @ATCNO % 10
@C8 = @ATCNO % 10
@C9 = @ATCNO % 10
@Q1 = ((10-((((@C1+@C3+@C5+@C7+@C9)*3)+(@C2+@C4+@C6+@C8)) % 10))%10)
@Q2 = ((10-(((((@C2+@C4+@C6+@C8)+@Q1)*3)+(@C1+@C3+@C5+@C7+@C9))%10))%10)
IF (@BTCNO * 100)+(@Q1 * 10)+@Q2 = @TcNo
@R = 1
ELSE
@R = 0
END
RETURN
Kaynak: http://tr.wikipedia.org/wiki/T%C3%BCrkiye_Cumhuriyeti_Kimlik_Numaras%C4%B1