Delphi Dünyası Facebook'ta

Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

Gönderen Konu: TC Kimlik No Doğrulama  (Okunma sayısı 1613 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı barutali

  • Administrator
  • *****
  • İleti: 2.229
  • Rep: +55/-0
  • Cinsiyet: Bay
  • Falan filan ...
  • Delphi Sürümü: 2010 - XE2
TC Kimlik No Doğrulama
« : 07 Mart 2010 04:34:25 »
Bir sitede tc kimlik no algoritması diye bi konu gördüm merak ettim neymiş diye .. Basit bir algotiması olduğunu farkettim sonrada alt taraftaki yorumlara baktım adamar R dilinde bile örneğini vermiş bi delphi yok :(:( dedim delphinin ne eksiği var bende oturdum delphi için olanını yaptım ...

genel mantık şu
 1. 3. 5. 7. ve 9. rakamların toplamı  * 7   den
 2. 4. 6. 8. sıradaki rakamların toplamını çıkarıp

sonucun mod 10 ununu alıyoruz bu bize 10. karakteri veriyor

1 den 10. karaktere kadar olanları da toplayıp mod 10 ununu alınca 11. karakteri veriyor..

bizde daha sonra işlem sonrası dönen 2 rakam ile kişinin verdiği bilgilerdeki son 2 rakamı karşılaştırıp doğru yada yanlış diyebiliyoruz..

 bende bu vaziyete göre kendimce aşağıdaki gibi bi function yazdım ..

Kod: [Seç]
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;
 


kullanımı :
 
Kod: [Seç]
if TCKimlikDogrula(Edit1.Text) = True then
  ShowMessage('doğru')
   else
    ShowMessage('yanlış');

edit1 e tc kimlik numaranızı girin ve test edin :):)






Amatör Küme Programcı

Çevrimdışı cakirr42

  • Administrator
  • *****
  • İleti: 1.069
  • Rep: +5/-0
  • Cinsiyet: Bay
  • Ben Bana Kendim İçin Lazımım...
    • Ahmet Kürşat ÇAKIR
  • Delphi Sürümü: XE, XE2
Ynt: TC Kimlik No Doğrulama
« Yanıtla #1 : 07 Mart 2010 11:54:56 »
hocam bu algoritmayı ben bi yerde bulmuştum ama kodlara dökememiştim  :D  bide ilk karakter "sıfır"(0) olamaz bunuda ekleyebiliriz..

bunu eklemek için;

if _Soniki = pSoniki then
satırını şöyle değiştirirsek;
if (_Soniki = pSoniki) and (bir>0) then

ilk karakterin 0 olamayacağı kontrolünüde yaparız
http://akcakir.net/
Dalından Kopan Yaprağın Akıbetini Rüzgar Tayin Eder
"Alparslan TÜRKEŞ"

Çevrimdışı barutali

  • Administrator
  • *****
  • İleti: 2.229
  • Rep: +55/-0
  • Cinsiyet: Bay
  • Falan filan ...
  • Delphi Sürümü: 2010 - XE2
Ynt: TC Kimlik No Doğrulama
« Yanıtla #2 : 07 Mart 2010 15:55:02 »
ilk karakterin sıfır olmamasını orda değil en üste sorgulaman lazım ..

if (Length(TCNo) < 11) or (Length(TCNo) > 11 )  or (TCNO[1] = '0' ) then
  begin
     ShowMessage('doğru düzgün gir tc no nu !!');
     Abort
  end



Amatör Küme Programcı

Çevrimdışı cakirr42

  • Administrator
  • *****
  • İleti: 1.069
  • Rep: +5/-0
  • Cinsiyet: Bay
  • Ben Bana Kendim İçin Lazımım...
    • Ahmet Kürşat ÇAKIR
  • Delphi Sürümü: XE, XE2
Ynt: TC Kimlik No Doğrulama
« Yanıtla #3 : 07 Mart 2010 15:56:43 »
Aslında Fark eden bişey yok ama üstte kakter kontrölü yapıldığı için o daha mantıklı..
http://akcakir.net/
Dalından Kopan Yaprağın Akıbetini Rüzgar Tayin Eder
"Alparslan TÜRKEŞ"

Çevrimdışı suskunqiz

  • Delphi 1 Level 2
  • **
  • İleti: 19
  • Rep: +0/-0
  • Cinsiyet: Bayan
Ynt: TC Kimlik No Doğrulama
« Yanıtla #4 : 27 Nisan 2011 16:43:32 »
yukarda kodu neyin içine yazdığınızı sorabilir miyim? benim müşteriler diye bir tablom var  ordaki alanlarımdan bir tanesi TcNo---Metin değerinde. formumda dbedit var musteri tablosunda tcno alanına bağlı. doğrula diye bir buton koydum kodu içine yazdım ama olmadı.
procedure TForm12.Button1Click(Sender: TObject);
begin butona tıklayınca üstte bu çıkıyo her zaman. ama sizinkinde function yazıyo nasıl yapmam gerekiyo aceba.

Çevrimdışı hayati

  • Administrator
  • *****
  • İleti: 860
  • Rep: +19/-3
  • Cinsiyet: Bay
Ynt: TC Kimlik No Doğrulama
« Yanıtla #5 : 27 Nisan 2011 17:09:11 »
Aliciğim eline sağlık...
( Gözünden kaçtı galiba  ;) )
http://www.delphidunyasi.net/delphi-sorulari/tc-kimlik-dogrulama-algoritmasi/
Olsa dahi tenimin kıl biten her yeri bir dil, güçsüzüm şükretmeye,şükrüm binde bir bile değil (İ.R.)