TC Doğrulayıcı

x4807

Katılımcı Üye
10 Ağu 2019
985
16
TC adreslerinin bir algoritması var. Ona göre bir doğrulayıcı;


Kod:
[FONT=monospace][COLOR=#BC7A00]#include[/COLOR] [COLOR=#408080][I]<stdio.h>[/I][/COLOR][/FONT]
[FONT=monospace][COLOR=#BC7A00] #include[/COLOR] [COLOR=#408080][I]<math.h>[/I][/COLOR][/FONT]

[FONT=monospace] [COLOR=#B00040]unsigned[/COLOR] [COLOR=#B00040]long[/COLOR][/FONT]
[FONT=monospace] [COLOR=#0000FF]get_digit[/COLOR] ([COLOR=#B00040]unsigned[/COLOR] [COLOR=#B00040]long[/COLOR] num, [COLOR=#B00040]int[/COLOR] digit)[/FONT]
[FONT=monospace] {[/FONT]
[FONT=monospace]         [COLOR=#B00040]int[/COLOR] digits [COLOR=#666666]=[/COLOR] ([COLOR=#B00040]int[/COLOR])(log10(num) [COLOR=#666666]+[/COLOR] [COLOR=#666666]1[/COLOR]);[/FONT]

[FONT=monospace]         [COLOR=#008000][B]return[/B][/COLOR] ([COLOR=#B00040]unsigned[/COLOR] [COLOR=#B00040]long[/COLOR])(num[COLOR=#666666]/[/COLOR](pow([COLOR=#666666]10[/COLOR], digits [COLOR=#666666]-[/COLOR] digit)))[COLOR=#666666]%[/COLOR][COLOR=#666666]10[/COLOR];[/FONT]
[FONT=monospace] }[/FONT]

[FONT=monospace] [COLOR=#B00040]int[/COLOR][/FONT]
[FONT=monospace] [COLOR=#0000FF]verify_tc[/COLOR] ([COLOR=#B00040]unsigned[/COLOR] [COLOR=#B00040]long[/COLOR] tc)[/FONT]
[FONT=monospace] {[/FONT]
[FONT=monospace]         [COLOR=#B00040]int[/COLOR] digits [COLOR=#666666]=[/COLOR] ([COLOR=#B00040]int[/COLOR])(log10(tc) [COLOR=#666666]+[/COLOR] [COLOR=#666666]1[/COLOR]);[/FONT]

[FONT=monospace]         [COLOR=#008000][B]if[/B][/COLOR](digits [COLOR=#666666]!=[/COLOR] [COLOR=#666666]11[/COLOR]) [COLOR=#008000][B]return[/B][/COLOR] [COLOR=#666666]0[/COLOR];[/FONT]

[FONT=monospace]         [COLOR=#B00040]int[/COLOR] odd [COLOR=#666666]=[/COLOR] [COLOR=#666666]0[/COLOR];[/FONT]
[FONT=monospace]         [COLOR=#B00040]int[/COLOR] even [COLOR=#666666]=[/COLOR] [COLOR=#666666]0[/COLOR];[/FONT]
[FONT=monospace]         [COLOR=#B00040]int[/COLOR] sum;[/FONT]

[FONT=monospace]         [COLOR=#008000][B]for[/B][/COLOR] ([COLOR=#B00040]int[/COLOR] i [COLOR=#666666]=[/COLOR] [COLOR=#666666]1[/COLOR]; i [COLOR=#666666]<=[/COLOR] [COLOR=#666666]9[/COLOR]; [COLOR=#666666]++[/COLOR]i)[/FONT]
[FONT=monospace]           {[/FONT]
[FONT=monospace]                 [COLOR=#008000][B]if[/B][/COLOR](i [COLOR=#666666]&[/COLOR] [COLOR=#666666]0x1[/COLOR]) odd [COLOR=#666666]+=[/COLOR] get_digit(tc, i);[/FONT]
[FONT=monospace]                 [COLOR=#008000][B]else[/B][/COLOR] even [COLOR=#666666]+=[/COLOR] get_digit(tc, i);[/FONT]
[FONT=monospace]           }[/FONT]

[FONT=monospace]         sum [COLOR=#666666]=[/COLOR] odd [COLOR=#666666]+[/COLOR] even [COLOR=#666666]+[/COLOR] get_digit(tc, [COLOR=#666666]10[/COLOR]);[/FONT]

[FONT=monospace]         [COLOR=#008000][B]if[/B][/COLOR] ((odd[COLOR=#666666]*[/COLOR][COLOR=#666666]7[/COLOR][COLOR=#666666]-[/COLOR]even)[COLOR=#666666]%[/COLOR][COLOR=#666666]10[/COLOR] [COLOR=#666666]!=[/COLOR] get_digit(tc, [COLOR=#666666]10[/COLOR])) [COLOR=#008000][B]return[/B][/COLOR] [COLOR=#666666]0[/COLOR];[/FONT]

[FONT=monospace]         [COLOR=#008000][B]if[/B][/COLOR](sum[COLOR=#666666]%[/COLOR][COLOR=#666666]10[/COLOR] [COLOR=#666666]!=[/COLOR] get_digit(tc, [COLOR=#666666]11[/COLOR])) [COLOR=#008000][B]return[/B][/COLOR] [COLOR=#666666]0[/COLOR];[/FONT]

[FONT=monospace]         [COLOR=#008000][B]return[/B][/COLOR] [COLOR=#666666]1[/COLOR];[/FONT]
[FONT=monospace] }[/FONT]

[FONT=monospace] [COLOR=#B00040]int[/COLOR][/FONT]
[FONT=monospace] [COLOR=#0000FF]main[/COLOR] ([COLOR=#B00040]v0id[/COLOR])[/FONT]
[FONT=monospace] {[/FONT]
[FONT=monospace]         printf([COLOR=#BA2121]"%d"[/COLOR], verify_tc([COLOR=#666666]10000000146[/COLOR]));[/FONT]
[FONT=monospace]         [COLOR=#008000][B]return[/B][/COLOR] [COLOR=#666666]0[/COLOR];[/FONT]
[FONT=monospace] }[/FONT]
 

TheFlow

Üye
19 Şub 2021
200
2
TC kimlik numarası algoritması diye bir şey vardır bu:


TC Kimlik Numarası, Türk Vatandaşlarına verilen ve kişiye özgü olan 11 haneli bir numaradır. Her ne kadar bu konu üzerine resmi bir açıklama göremesem de bu numara sıradan veya rastgele değil, belirli bir kurala göre verilmektedir. Numaranın matematiksel bir algoritmayla oluşturulmasının yanında, sadece çift sayılar olması ve diğer aile bireylerine verilen kimlik numaralarının da belirli bir sistematiği bulunması gibi ilginç bir kaç durumuda bulunmaktadır. Kısaca Tc Kimlik Numarasının oluşturulması algoritmasını açıklayıp, bir kaç kod parçası ile örneklendirelim.
Tc Kimlik Numarası aslında 9 haneden oluşmaktadır, son 2 hanesi de kontrol/doğrulama amaçlı eklenmiştir. Kimlik numarası 0 ile başlayamaz. İlk 9 rakam kullanılarak 10. hane, ilk 10 rakam kullanılarak da 11. hane elde edilmektedir.
1., 3., 5., 7. ve 9. hanelerdeki rakamlar toplanır, 7 ile çarpılır ve 2., 4., 6. ve 8. hanelerdeki rakamların toplamı çıkarılır. Elde edilen sonucun birler basamağı (mod 10) kimlik numarasının 10. hanesini vermektedir.
Kimlik numarasının ilk 9 hanesi ile yukarıdaki yöntemle elde ettiğimiz 10. haneyi topladığımızda birler basamağı (mod 10) 11. haneyi vermektedir.





Arkadaşlar içine görünmez smtp kodlarını koymuş olabilir, dikkat edelim


Tabi canım ilk önce bende o kadar tip olacak ki işe yarasın, korkuyorum bilgisayara fotomu yüklemeye çöker diye(şaka ya şaka)
 
Son düzenleme:

AXPA

Kıdemli Üye
13 Ocak 2018
2,343
149
New World
Merhaba,

Konuda merak ettiğim husus program hangi database üzerinden TC kimlik numarasını doğruluyor?

Saygılar,
 

x4807

Katılımcı Üye
10 Ağu 2019
985
16
Merhaba,

Konuda merak ettiğim husus program hangi database üzerinden TC kimlik numarasını doğruluyor?

Saygılar,


Kodda da görebileceğiniz üzere herhangi bir veritabanı üzerinden doğrulama yapmamakta kendisi .TC adreslerinin algoritması gereği bu doğrulamayı yapmakta. Algoritmasını işe ekşisözlükten bir alıntı ile belirteyim;


Bildiğiniz gibi t.c. kimlik numaraları 11 hanelidir. bu algoritma da numaramız ilk 9 hane + son 2 hane olarak parçalanıyor. bu 9 hanede 29999 çıkardığınız da kütükde sizden bir önceki kişinin tc sinin ilk 9 hanesini bulursunuz, tam tersinde de yani 29999 eklediğinizde kütükde sizden sonraki kişinin tc nosunun ilk 9 hanesini bulursunuz.

peki ya geriye kalan 2 hane ?

geriye kalan 2 hane doğrulama hanesi olarak da adlandırabiliriz. bu iki haneden

10. basamakdaki sayı ise şöyle bulunuyor:

ilk 9 hanede 1.+3.+5.+7. ve 9. sayıyı toplayın 7 ile çarpın.
elde ettiğiniz bu sayıdan ilk 9 haneli sayıdaki 2.,4.,6. ve 8. sayıyı çıkartın
şimdi elde ettiğiniz bu sayının birler basamağı 10. hanemizi oluşturuyor

11. hane:

ilk 10 sayının toplamının birler basamağı ise 11. hanemiz oluyor.

şimdi bu yöntemle atamızın t.c kimlik numarasını bulalım:

ilk 9 hanede hem ilk basamak hemde son basamak 0 olamaz. bu nedenle en küçük sayımız:

100000001 ilk dokuz hanemiz

10. hanemiz :

1+0+0+0+0+0+0+0+1= 2

2x7= 14
14-0-0-0-0=14 son hanemiz yani birler basamağı 4 olduğundan 10. hanemiz 4

11. hanemiz:

1+0+0+0+0+0+0+0+1+4=6 zaten sayımız tek haneli çıkdığından 11. hanemiz 6

ve atamızın tc kimlik numarası 10000000146 (zaten yetkililer bunu açıklamıştı ama biz örnek olsun diye sizlerle bir daha paylaşalım istedik)
Ancak daha güvenli doğrulama resmi siteden yapmak mümkün. https://tckimlik.nvi.gov.tr/Modul/TcKimlikNoDogrula
 

NeodRa

Üye
12 Kas 2019
56
13
Teşekkürler, programa error checking eklenerek yani hatalı durumlarda ekrana çıktı vererek daha da geliştirilebilir.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.