Algoritma danışıyorum: Yanlış tc numarasını düzelten site ya

Kodla Büyü

halk

Süper Üye
Süper Üye
Seçkin Üye
Mesajlar
1,588
Yanlış yazılan tc kimlik numaralarını düzelten bir site yapmak istiyorum. TC numarası bulma algoritması zaten piyasada var. Ben o algoritma ile en alt ve en üst aralığı taratıp tüm olası tc numaralarını bir veritabanına atmak istiyorum. Siteye gelen kişide elindeki yanlış ya da eksik ya da fazla haneli tc kimlik numarasını arama kutusuna yazacak. Site en benzer gerçek tc kimlik numarasını veritabanından bulup söyleyecek.

Bunun için veritabanından okuturken nasıl bir yöntem izlenmeli? Like fonksiyonu %100 benzer olduğunda buluyor. Soundex ya da difference tarzı fonksiyonlar stringlerde benzerlik durumuna bakıyor. Girilen yanlış tc numarası için nasıl bir yöntem ile doğru sonucu buldurabilirim?
 
mesela ziyaretçi tarafından 1-2 rakam yanlış yazıldı, o yanlış yazılan tc noya en çok benzeyen doğru tc noları mı göstermek istiyorsun? yani googledaki gibi yanlış yazımları düzeltmek istiyorsun?
 
soruyu tekrar okudum... tamam doğru anlamışım, güzel soru :)
buradaki uygulama levenshtein algoritması ile olur. sitelerimden birinde ürün arama kısmında kullandım 3 yıl önce. ürün adını arama kutusuna yanlış yazdığında "bunu mu demek istediniz: xxx" şeklinde düzeltiyordu... google'daki mantık da aynı, konuşan botlarda ve plaka okuma sistemlerinde de aynı mantık var.
http://php.net/manual/tr/function.levenshtein.php
 
Rüzgara Karşı'' Alıntı:
soruyu tekrar okudum... tamam doğru anlamışım, güzel soru :)
buradaki uygulama levenshtein algoritması ile olur. sitelerimden birinde ürün arama kısmında kullandım 3 yıl önce. ürün adını arama kutusuna yanlış yazdığında "bunu mu demek istediniz: xxx" şeklinde düzeltiyordu... google'daki mantık da aynı, konuşan botlarda ve plaka okuma sistemlerinde de aynı mantık var.
http://php.net/manual/tr/function.levenshtein.php

O algoritmayı biliyorum ama olası tc kimlik numaraları toplam 900 milyon ediyor. Hepsini yanlış girilen tc numarası ile karşılaştırıncada yaklaşık 5 saat sürüyor. Türkiyenin nüfusu 900 milyon olana kadar numara verilebilsin diye ayarlamışlar. Tabi mevcut numaralar 75 milyonla sınırlı değil. TC döneminde yaşamış olan gelmiş geçmiş herkesin var.

TC kimlikleri attığım veritabanı da zaten 3 küsür GB ediyor. Yani hosting firmasına en az 200 lira ödemek gerekecek. Astarı yüzünden pahalı olacak gibi.
 
halk' Alıntı:
Rüzgara Karşı'' Alıntı:
soruyu tekrar okudum... tamam doğru anlamışım, güzel soru :)
buradaki uygulama levenshtein algoritması ile olur. sitelerimden birinde ürün arama kısmında kullandım 3 yıl önce. ürün adını arama kutusuna yanlış yazdığında "bunu mu demek istediniz: xxx" şeklinde düzeltiyordu... google'daki mantık da aynı, konuşan botlarda ve plaka okuma sistemlerinde de aynı mantık var.
http://php.net/manual/tr/function.levenshtein.php

O algoritmayı biliyorum ama olası tc kimlik numaraları toplam 900 milyon ediyor. Hepsini yanlış girilen tc numarası ile karşılaştırıncada yaklaşık 5 saat sürüyor. Türkiyenin nüfusu 900 milyon olana kadar numara verilebilsin diye ayarlamışlar. Tabi mevcut numaralar 75 milyonla sınırlı değil. TC döneminde yaşamış olan gelmiş geçmiş herkesin var.

TC kimlikleri attığım veritabanı da zaten 3 küsür GB ediyor. Yani hosting firmasına en az 200 lira ödemek gerekecek. Astarı yüzünden pahalı olacak gibi.
hepsiyle kıyaslamayacaksın tabi. kurallara göre olabilecek x kadar tc noyla karşılaştır, en çok benzeyenleri gösterirsin.
çok elzem birşey değil, uğraşmaya değmez bence de :)
ziyaretci tc nosunu yanlış girmişse o kendi sorunu, sitenin tc noyu düzeltmesine ne gerek var....
 
hocam bizim matematik öğretmeni arkadaş bunu proje olarak sunuyor meb e. tc nodan bir numara eksik olduğunda (hangisi olduğu önemli değil) doğrusunu buluyor. nasıl yaptığını sormuştum ama hatırlamıyorum şimdi. işine yarayacaksa sorarım yine.
 
Rüzgara Karşı'' Alıntı:
halk' Alıntı:
Rüzgara Karşı'' Alıntı:
soruyu tekrar okudum... tamam doğru anlamışım, güzel soru :)
buradaki uygulama levenshtein algoritması ile olur. sitelerimden birinde ürün arama kısmında kullandım 3 yıl önce. ürün adını arama kutusuna yanlış yazdığında "bunu mu demek istediniz: xxx" şeklinde düzeltiyordu... google'daki mantık da aynı, konuşan botlarda ve plaka okuma sistemlerinde de aynı mantık var.
http://php.net/manual/tr/function.levenshtein.php

O algoritmayı biliyorum ama olası tc kimlik numaraları toplam 900 milyon ediyor. Hepsini yanlış girilen tc numarası ile karşılaştırıncada yaklaşık 5 saat sürüyor. Türkiyenin nüfusu 900 milyon olana kadar numara verilebilsin diye ayarlamışlar. Tabi mevcut numaralar 75 milyonla sınırlı değil. TC döneminde yaşamış olan gelmiş geçmiş herkesin var.

TC kimlikleri attığım veritabanı da zaten 3 küsür GB ediyor. Yani hosting firmasına en az 200 lira ödemek gerekecek. Astarı yüzünden pahalı olacak gibi.
hepsiyle kıyaslamayacaksın tabi. kurallara göre olabilecek x kadar tc noyla karşılaştır, en çok benzeyenleri gösterirsin.
çok elzem birşey değil, uğraşmaya değmez bence de :)
ziyaretci tc nosunu yanlış girmişse o kendi sorunu, sitenin tc noyu düzeltmesine ne gerek var....

Hocam ziyaretçinin TC numarasını yanlış yazması meselesi değil. Genel bir site olacak. Yani devlet dairelerinde falan tc numaraları ile çok uğraşılıyor ve çoğu kişi elle yanlış yazıyor. Bu numara olmadanda ilgili kayıtlar yapılamıyor. Mesela halk eğitimde ön kayıt esnasında bir çok kişi yanlış tc vermiş oluyor. TC olmadan da o kişiyi kaydedemiyoruz kursa.

dioden' Alıntı:
hocam bizim matematik öğretmeni arkadaş bunu proje olarak sunuyor meb e. tc nodan bir numara eksik olduğunda (hangisi olduğu önemli değil) doğrusunu buluyor. nasıl yaptığını sormuştum ama hatırlamıyorum şimdi. işine yarayacaksa sorarım yine.

dioden hocam. Sen bir zahmet o arkadaşa sorabilirsen sevinirim.
 
Rüzgara Karşı'' Alıntı:
soruyu tekrar okudum... tamam doğru anlamışım, güzel soru :)
buradaki uygulama levenshtein algoritması ile olur. sitelerimden birinde ürün arama kısmında kullandım 3 yıl önce. ürün adını arama kutusuna yanlış yazdığında "bunu mu demek istediniz: xxx" şeklinde düzeltiyordu... google'daki mantık da aynı, konuşan botlarda ve plaka okuma sistemlerinde de aynı mantık var.
http://php.net/manual/tr/function.levenshtein.php

Hocam bugüne kadar hiç böyle birşeye ihtiyacım olmadığı için bilgim yoktu teşekkürler bilgi için.

Ben birden fazla kelimeli girilen aramalarda (örneğin bilgisayar kasası) LIKE kalıp halinde aradığı için bunu kelimelere bölerek OR'larla her kelimeyi LIKE'a gönderen (örnek için LIKE '%bilgisayar%' OR LIKE '%kasası%') bir fonksiyon geliştirdim onu kullanıyorum o da oldukça faydalı oluyor. Fakat yukarıdakinin amacı tek kelimede yanlış yazımlar, amaç farklı tabi.

halk' Alıntı:
dioden' Alıntı:
hocam bizim matematik öğretmeni arkadaş bunu proje olarak sunuyor meb e. tc nodan bir numara eksik olduğunda (hangisi olduğu önemli değil) doğrusunu buluyor. nasıl yaptığını sormuştum ama hatırlamıyorum şimdi. işine yarayacaksa sorarım yine.
dioden hocam. Sen bir zahmet o arkadaşa sorabilirsen sevinirim.

TC No'dan bir rakam eksik olduğunda TC no algoritmasına göre olasılıklar hesaplanarak yapılabilir. Örneğin 1. hanenin eksik olduğu düşünülerek 1. haneye 0-9 (1. hanede 1-9 olmalı sanırım 0'la başlayan TC yok) arası koyarak yazılım tek tek kontrol bloğunu oluşturarak kontrol eder. Son iki hane tutarsa eksik rakam bulunmuş olur. 1. hanede 1-9 arası tutmadıysa 2., 3., 4. ... 9. haneye kadar her hane için 0-9 arasını tek tek kontrol eder. Son iki haneyi veren ilk 9 rakam sağlanırsa bingo. Yine tutmuyorsa, demekki son iki hanede sorun var. İlk 9 haneye göre son 2 haneyi TC no algoritmasına göre tekrar hesaplar ve düzeltir.

Aslında bu sizin sorunuza da cevap olmuş gibi oldu. TC No algoritmasını tamamen incelemedim, sadece aklımda kalan son 2 hanenin ilk 9 rakamdan oluşturulan bir kontrol hanesi olduğu. Ona göre yazdım yorumu.
 
halk' Alıntı:
Hocam ziyaretçinin TC numarasını yanlış yazması meselesi değil. Genel bir site olacak. Yani devlet dairelerinde falan tc numaraları ile çok uğraşılıyor ve çoğu kişi elle yanlış yazıyor. Bu numara olmadanda ilgili kayıtlar yapılamıyor. Mesela halk eğitimde ön kayıt esnasında bir çok kişi yanlış tc vermiş oluyor. TC olmadan da o kişiyi kaydedemiyoruz kursa.
hocam dediğim gibi veritabanıyla kıyaslaman mümkün değil, o yüzden olası tc nolarla kıyaslayacaksın. mesela farzet ki 1 veya 2 numara yanlış yazıldı. buna göre olası tc noları bir diziye aktarıp kıyaslamanı yaparsın. zaten bilindiği gibi 1 tc no yanlış yazılma örneği 11, 2 tc no yanlış yazılma örneği 55.tabi bu 2 tc no yanlış yazmanında kendi içinde olasılıkları var. mesela 2 tc no yanlış yazılmış 55 örnekten sadece bir tanesini baz alalım; yanlış yazılmış 2 sayının farkı 3 diyelim, 7 tane olasılık çıkıyor sadece bunun içinde...

eya' Alıntı:
Hocam bugüne kadar hiç böyle birşeye ihtiyacım olmadığı için bilgim yoktu teşekkürler bilgi için.

Ben birden fazla kelimeli girilen aramalarda (örneğin bilgisayar kasası) LIKE kalıp halinde aradığı için bunu kelimelere bölerek OR'larla her kelimeyi LIKE'a gönderen (örnek için LIKE '%bilgisayar%' OR LIKE '%kasası%') bir fonksiyon geliştirdim onu kullanıyorum o da oldukça faydalı oluyor. Fakat yukarıdakinin amacı tek kelimede yanlış yazımlar, amaç farklı tabi.
önemli değil, levenshtein bu iş için biçilmiş kaftan, tek kelime içindir diye bir kısıtlama yok.
 
özetlemek gerekirse hangi numaranın yanlış yazıldığı belli değil. 1 numara yanlış diye düşünürsek 11 , 2 numara yanlış diye düşünürsek yüzlerce ihtimal çıkar ortaya... ee bu olası numaraların, yanlış girilmiş tc noya benzerliği de aynı. neye göre bu benzerlikler ayırt edilecek.... kısır bir uygulama olur. anlatabildim mi?
kısacası uğraşmaya değmez :=)
 
Geri
Üst