Bir müşteriden inatla gelen doğrulama isteği üzerine T.C. kimlik no'sunun rakamsal olarak "kesinlikle" doğru olmadan formun validate etmemesi için ufak bir araştıma sonucunda şunu buldum.
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.
Birkaç link ötesinde de şu kodlara rastladım
C#
|
|
VB
|
|
|
|
Arada ismi geçti bari atlamayayım dedim.
|
|
önceki yazı CSS'de Arkaplan : Bilmeniz Gereken Her Şey |
sonraki yazı jquery ile basit bir form validator |
buyrun. bu da tarafımdan javascripte çevrilmiş hali.
|
|
Bu da benden PHP+RegExp hali:
|
|
PHP olmasa satır satır kod yazacaktım. RegExp PHP ile güzel ;)
http://www.kavramca.com/index.php?k=28
bu da sql kodu...
koda şunun için bir ekleme yapsanız iyi olacak:
ilk 9 rakamı birbirine eşit ve son 2 rakamı 0 olan Tc. Kimlik No'lar kabul edilmemelidir.
Not: Eğer çoklu üyelikleri engelleme amaçlı kimlik no gibi bir aracı kullanmak istiyorsanız, size tavsiyem hiç denememeniz. Ben denedim. Hata ettim.
tc kimlik no ile üniversite öğrencisi olup olmadığı devletin verdiği kpss hizmetiyle öğrenilebiliyor. bu hizmetten yararlanmak için şirket olmalısın (şahıs şirketi hariç). Ayrıca bu hizmete bağlanacağın statik bir ip belirtmelisin.
mantığı anladım, php ile kendi aile fertlerimi ileri geri nasıl bulabileceğimi de buldum...
gel gelelim test edip, bu kimlik id sinin kime ait olduğunu bulacağım bir sayfa bulamadım...
yine de güzel bir şeydi... aklımdan, bu sistem de kırılır diye geçiyordu...
SSK'yı kullan
Yok doğru olan 7 katı. ama burda farklı bir yol izlenmiş. Direkt formul bu şekilde. Kendi projemde de bu şekilde düzenlemiştim.
Q1 = ((c1+c3+c5+c7+c9)*7 - (c2+c4+c6+c8)) Mod 10
Q2 = ((c1+c2+c3+c4+c5+c6+c7+c8+c9+Q1) Mod 10
Yukarıda anlatılanlar kaynaklara dayalı anlatımdı.
TC kimlik numaram algoritmaya uymuyor
yeterince test yapmamış olsam tamam derdim ama. 20 Numaradan 20 side geçince testten. doğruluğuna inanıyorsun...
Peki bu hash nasıl bulundu? Birilileri deneme yanılma yoluyla mı buldular yoksa bilimsel yollar mı izlendi? Yoksa devlet mi yayınladı? Ya da bunu yapanlar arkadaşlarını falan mı söylediler?
Ben bi hash'ı çözmek istiyorum da.
1-) Bunu yapanlarda yazılımcılar. Yazılımcı bir arkadaşına söyler, o bir başkasına vs. vs. uzar gider, buralara kadar gelir...
2-) Ayrıca bu işin sanatını bilen şifre kırıcılar var. Onlarda çözmüş olabilir.
Bu kadar saçma bir algoritma olamaz. Sözüm yukarıda algoritmayı yazan arkadaşlara değil, TC kimlik numarasının son iki hanesinin ilk dokuz hanesine matematiksel olarak bağlı olması saçmalık. Son iki veya üç hanenin rastgele seçilmiş olması gerekirdi. Şu haliyle basit bir döngü yardımıyla bir sürü gerçek TC Kimlik numarası üretilebilir. Oysa dediğim gibi son 3 hane rastgele seçilmiş olsaydı, üretilen herhangi bir numaranın gerçek olması ihtimali binde bir olurdu.
Tabi rastgele üretilseydi de kontrol yapılması gerekince kimse kontrol edemeseydi doğru yanlış mı asla bilemeseydik. Güzel mantık.
peki ilk 9 hanenin üretimindeki algoritmayla ilgili fikri bilgisi olan var mı ? Yoksa o kısım tamamen rasgele mi üretiliyor?
Formülleri incelerken TC Kimlik Numarasının son 2 hanesinin sadece doğrulama amaçlı olarak orada olduğuna değinmiştim. O nedenle 11 basamaklı TC Kimlik Numarasının son 2 hanesini attığımda geriye kalır sağdan 9 basamaklı başka bir sayı kaldı. Bu sayıdan 29999 çıkarttığımda kütükte benden 1 önceki birey numarasına sahip olan kişinin TC Kimlik Numarasının ilk 9 basamağını bulmuştum. Yine o sayıdan da 29999 çıkardığımda ondan bir önceki kişinin TC Kimlik Numarasının ilk 9 basamaklı sayısını bulmuştum.
...
...İşin özeti şu; TC Kimlik Numaraları her ne kadar sıralı gözükmese de aslında birey bazında ardışık. Tek fark, sayının 1'er 1'er değil, 29999'ar 29999'ar artıyor olması...
Makale sahibi demiş ki;
VB kodlarını kullanmak istedim ancak rakamları string olarak algılamak gibi garip bir hata ile karşılaştım.
garipliği önce kendinizde aramalısınız! nitekim;
Function TcDogrulaV2(ByVal tcKimlikNo As String) As Boolean
tcKimlikNo isimli parametre zaten string olarak yakalanmış, string olarak algılamasaydı esas gariplik o zaman yaşanırdı. altını çizdiğim ifadeyi integer olarak değiştirseydiniz başka başka gereksiz fonksiyonlar kullanmanız gerekmez visual basic için garip betimlemesi yapma ihtiyacınız da kalmazdı.
@lazaronnie
düzelttiğin için teşekkür ederim arkadaşım. Ama sorunu kendimde arayamıyorum malesef. Çünkü "rakamları string olarak algılamak gibi garip bir hata ile karşılaştım." derken ilk belirttiğim vb kodu, yani bana ait olmayan kod içerisinde toplama işlemi yapıldığında string değer veriyordu. (1+3 = 4 yerine 1 + 3 = 13 gibi). bu kodu yazan arkadaşın bilgisini göz önüne aldığımda bu hata ile karşılaşmam evet garip geldi.(ki .net kullanmakta gerçekten yeniyim) ben de kendi kodumda o sorunu giderdim ve sunumumu yaptım.
Neyse dikkatin için tekrar teşekkür ederim.
Sert çıktıysam özür dilerim, .net'te yeni olduğunuzu bilmiyordum..
bilgiler süper makaleyi yazana ve bize ulaştırana teşekkürler ;)
sanki excel çalışma yapılmış tc kimliklerde.
bu algoritmayı beğenmeyen sevgili arkadaşlar, sizce nasıl bir algoritma yazılabilirdi. Algoritma konusunda iyi değilim, ancak merak ettim. Fikirlerinizi bir alıyım dedim.
@darkhorn, @moratmoon
Sahip olduğun bir kredi kartının numarasının ilk 12 rakamı sıralı bir sayının rakamları olsa, geriye kalan rakamlar bu sıralı sayılara istinaden belli bir algoritma ile üretilen rakamlar olsa, bu algoritmanın ne olduğu da bilinse, kredi kartı kullanmaya devam eder miydin?
İşte bu yüzden son iki rakamın diğerlerine bağlı olmasının saçma olduğunu savunuyorum.
@algorian, amaç numarayı gizlemek, şifrelemek değil. amaç numaranın yanlış yazılmasını önlemek. örnek vereyim. kendimden örnek vereyim, ben öğrenciyim, öğrenci numaram da 1234567 gibi 7 basamaklı bişey. son rakamı ilk 6 rakamına göre oluşturuluyor. her ay yurt parasını yatırmaya gidiyorum, numaramı söylüyorum öyle ödeniyor, aşağı yukarı 5-10 ödemeden birinde göevli numarayı yanlış algılıyor. düşün ki 123456 olsaydı öğrenci numarası, başkasının yurt ücretini ben ödeyecektim. onun önüne geçmek için 7. haneyi oluşturmuşlar. o yüzden numarada yanlış olduğunda ödemeyi yapamıyor banka görevlisi. aynı şey tc kimlik numarası için de geçerli. eğer o sondaki 2 numara olmasa kaç kişinin başı yanardı haberin var mı?
öğrenci numaraları şöyle gidiyor:
1234564
1234571
1234588
1234598
1234609
1234614
Kredi kartı örneği çok yersiz olmuş, kredi kartı numarası bilsen bile kredi kartı sahibinin adını soyadını, hangi kart türü olduğunu, son kullanma tarihini ve cvc numarasını bilmen gerekir. ikincisi o kredi kartı numarasının son iki rakamı bir algoritmaya göre oluşturulsa son iki rakamını bilmen için ilk 10 rakamını bilmen nerekecek, kim nerden bilecek ki onu?
bir de tc kimlik numarasının bilinmesi çok da zararlı değil, kim ne yapabilirki tc kimlik numarasıyla? her tc kimlik numarasını gösterene sanki kredi kartı veriyorlar. onun için adını soyadını, doğum yeri tarihi, adresi falanı filanı bilmen lazım ki sahtekarlık yapabilesin... ki onu da nerden öğreneceksin, kaldı ki ilk hash'i değil de ilk rakamları nerden öğrenecen.
yani şimdi diyoum ki, sen bu algoritmayı biliyorsun, ne yapabilirsin ki? gidip biisinin kimliğine bakıp ilk 9 hanesini mi alacaksın? sonra da son iki hanesini mi hesaplayaca? e bakmışken son iki hanesine de bak artık.
yoksa kafana göre bir numara sallayıp tc kimlik numarasının tamamını mı bulacaksın? buldun, ne yapabilirsin ki o numarayla, kime ait olduğunu nereden bileceksin? ragele bir şahsiyet oluşturup hesap mı açcaksın? rasgele bir kimlik oluşturdun diyelim, bankalar içişlerinin veritabanına bağlanıyorlar kimliği kontrol etmek için, yakayı ele vereceksin.
yani bana nasıl süistimal edilebileceğini söyle sana nasıl yanıldığını söyleyeyim.
@darkhorn bazı sitelere üye olurken tckimlik numaranın sayısal değerine göre üyeliği kabul ediyor. O sitelere kendi tc kimlik numaranı vermek istemiyorsan bu algoritmaya göre oluştur bi tckimlik onunla gir :) bununda hiçbir zararı yok.
Key odemeleri aciklanirken verilen isim ve TC kimlik numaralari ile buyuk bir dolandiricilik yapildimi bakmak lazim.
@shibbytr bazı siteler de başvuru yaparak nüfus kütüklerine sayısal erişim izni alıyorlar.
Sizi üye yaparken isim soyisim falan sormuyorlar. Direk tc nosu istiyorlar. Ajax yardımıyla nüfus kütüklerinden isminizi çekebiliyorlar bu şekilde. Eğer böyle bir siteye aynı anda tc ve isim soran uygulama eklenirse verdiğiniz tc nosuna yanıt olarak dönen isim bilgisiyle sizin verdiğiniz bilgi birbirini tutmaz ise web siteleri size ait olmayan bir tc nosunu girdiğinizi anlayabilecektir.
Kırılmaz diye bir parola yoktur. sadece kırması uzun süre parola vardır.
pillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.
Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.