TC Kimlik no ile ilgili geliştirme yaptığımız uygulamalarda kullanıcı boş geçebiliyor veya saçma tc kimlik numarası girebiliyorlar ama sizde işlemlerinizi tc kimlik no üzerinden yaptığınızda karışıklıklara sebep olabiliyor.
Delphi TC Kimlik No Doğrulama Algoritması
- TC Kimlik numaraları 11 basamaktan oluşmaktadır. İlk 9 basamak arasında kurulan bir algoritma bize 10. basmağı, ilk 10 basamak arasında kurulan algoritma ise bize 11. basamağı verir.
- 11 hanelidir.
- Her hanesi rakamsal değer içerir.
- İlk hane 0 olamaz.
- 1. 3. 5. 7. ve 9. hanelerin toplamının 7 katından, 2. 4. 6. ve 8. hanelerin toplamı çıkartıldığında, elde edilen sonucun 10′a bölümünden kalan, yani Mod10′u bize 10. haneyi verir.
- 1. 2. 3. 4. 5. 6. 7. 8. 9. ve 10. hanelerin toplamından elde edilen sonucun 10′a bölümünden kalan, yani Mod10′u bize 11. haneyi verir.
Delphi Kodu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | Function TCKimlikDogrula(TCNo : String) : Boolean; var bir,iki,uc,dort,bes,alti,yedi,sekiz,dokuz,onn,onbir, ilk,son,onuncu,onbirinci : integer; _Soniki, pSoniki : string; begin if (Length(TCNo) < 11) or (Length(TCNo) > 11 ) then begin ShowMessage('doğru düzgün gir tc no nu !!'); Abort end else bir := StrToInt(TCNo[1]); iki := StrToInt(TCNo[2]); uc := StrToInt(TCNo[3]); dort:= StrToInt(TCNo[4]); bes := StrToInt(TCNo[5]); alti:= StrToInt(TCNo[6]); yedi:= StrToInt(TCNo[7]); sekiz:= StrToInt(TCNo[8]); dokuz:= StrToInt(TCNo[9]); onn := StrToInt(TCNo[10]); onbir:= StrToInt(TCNo[11]); ilk := (bir+uc+bes+yedi+dokuz) * 7; son := iki+dort+alti+sekiz; onuncu := (ilk - son) mod 10; onbirinci := (bir+uc+bes+yedi+dokuz+iki+dort+alti+sekiz+onuncu); onbirinci := onbirinci mod 10; _Soniki := IntToStr(onuncu) + IntToStr(onbirinci); pSoniki := TCNo[10] + TCNo[11]; if _Soniki = pSoniki then begin Result := True; end else Result := False; end; |
Teşekkür ederim desteğin için ayhan abi artık Delphi yazmayınca çalışmıyor diye yorum yazan arkadaşlara örnek kod bulup test edip paylaşamıyordum iyi oldu bu eline sağlık.
T.C Kimli no doğrulama algoritması değişmiş olabilir.
Değişmiş olduğunu düşünmüyorum ama delphi kısmında değilde c# ve javascript tarafında aynı algoritmayı halen kullanıyorum ama dediğim gibi delphi tarafında sıkıntı olabilir.
Yukarıdaki kod yaklaşık 500 farklı TCNo doğruladıktan sonra bugün bir tane doğrulamadı. https://tckimlik.nvi.gov.tr/TCKimlikNo/Dogrulama.aspx sitesinden kontrol edildiğinde TCNo doğru. Sebebini anlayamadım. Acaba farklı kontroller geektiren TCNo şekilleri mi çıktı?
Merhaba algoritma ile ilgili bir sıkıntı söz konusu olmuş olabilir servis kullanma imkanınız varsa en sağlıklısı servis kullanmak ama offline çalışacak bir proje ise algoritmadaki sıkıntıyı bulmak gerekli bu durumda.