.NetGurus

Diğer Yazılar

Google a Ekle

Add to Google



TC Vatandaşlık Numarası Doğrulama

E-devlet projeleri giderek yaygınlaşıyor. Bu projelerden belki de en eski ve muhtemelen en temel olanı da "vatandaşlık numarası" ya da kod adı ile söylemek gerekirse "mernis" uygulamasıdır.

Türkiye Cumhuriyeti vatandaşı olarak, vatandaşlık rolümüz gereği gerekli yerlerde bize ait bu bilgiyi ibraz ediyoruz. Ancak profesyonel kimliğimiz yani yazılım geliştirici rolümüze gereği ise zaman zaman bu bilgiyi alan taraf oluyoruz :) Şimdi işin bu kısmını yani yazılımcı rolümüzde yapmamız gerekenleri inceleyelim.

Geliştirdiğimiz uygulamalarda girilen vatandaşlık numarasını kullanarak kişinin nüfus-kimlik bilgilerine ulaşırız. Bu işlemi Tc Nüfus ve Vatandaşlık İşleri Gn. Md' ne ait web servisleri ile gerçekleştirebiliriz. Bu konuda bilgi için kurumun http://tckimlik.nvi.gov.tr/Web/WebServices.aspx adresini ziyaret edebilirsiniz. Doğal olarak vatandaşlık bilgisi servisi canı isteyen herkesin kullanabileceği bir servis değil. Bunun için kurum ile görüşüp onay alınması gerekli. Onay işleminden sonra hem servisi kullanabilmenizi sağlayan kullanıcı adı ve şifreyi alıyorsunuz hem de giriş yaptıktan sonra servisi nasıl kullanabileceğinize dair örnek kod kütüphanelerine ulaşabiliyorsunuz.

Yazımızın asıl konusuna gelecek olursak. Servisin (özel bir kurum değilseniz...) sorgulama başına ücret alması, uzaktaki bir sistemle konuşmanın uygulamanızı yavaşlatması gibi sebeplerden ötürü servise gitmeden önce elinizdeki vatandaşlık numarası bilgisinin geçerli olup olamayacağını kontrol etmeniz faydalı olacaktır. Ayrıca bu servisi kullanma yetkiniz yoksa örneğin bir web sitesinde üyelerinizden vatandaşlık numaralarını istiyorsanız, girilen bilginin geçerli olup olamayacağını kontrol etmek mecburen size kalıyor.

Lafı biraz uzattım ama yazının en güzel kısmı olan teknik kısma geçmeden önce son olarak şunu belirteyim ki yapacağımız kontrol sadece bir ön kontroldür. Kontrol edeceğimiz vatandaşlık numarasının geçerli olması böyle bir vatandaşlık numarasının olduğunu, bu numaraya sahip bir vatandaş olduğunu göstermez. Sadece numaranın bir vatandaşlık numarası olabileceğini gösterir. Bu sayede bilerek ya da bilmeyerek hatalı girilen bir numara için boşu boşuna kaynaklarımızı boşa harcamamış oluruz.

Şimdi gelelim sadede. Bir sayının vatandaşlık numarası olabilmesi 11 haneden oluşan pozitif bir tam sayı olması ve soldan ilk 10 hanede bulunan rakamların toplamının birler basamağındaki rakamın bu sayının 11 nci hanesindeki rakama eşit olması gerekmektedir. Çok aman aman bir değilse de 10 -15 tane aritmetik işlem yapmadan önce daha basit bir kaç kontrol yaparak hatalı numaraları tespitedebiliriz. Bunun için elimizdeki veriyi sırası ile şu işlemlere sokmak daha doğru olacaktır;

- Elimizdeki veri(sayı, metin vs.) 11 haneli mi

- Pozitif bir tam sayı mı

- 10000000000 ile 99999999999 arasında mı

- Çift mi

- Son olarak da soldan ilk 10 hanenin toplamının birler basamağı 11 nci haneye eşit mi.

Bu testleri geçen bir veri geçerli bir vatandaşlık numarası olabilir.

Bu işlemleri gerçekleştiren fonksiyonumuz ise şöyle;

Public Shared Function TcNoKontrol(ByVal TcNo As String) As Boolean

     Dim sonuc As Boolean = False

     'Tc numarasının 11 hane olup olmadığını kontrol ediyoruz

     If TcNo.Length.Equals(11) = False Then Return False

    

     'Tc numarasının pozitif bir tam sayı olup olmadığını kontrol ediyoruz

     Dim tmpTcNo As UInt64

     If UInt64.TryParse(TcNo, tmpTcNo) = False Then Return False

     If (tmpTcNo < 10000000000 OrElse tmpTcNo > 99999999999) Then Return False

    

     'Tc numarasının çift olup olmadığını kontrol ediyoruz

     If tmpTcNo Mod 2 <> 0 Then Return False

    

     'Tc numarasının soldan ilk 10 hanesinin toplamının birler basamağının 11 nci haneye eşit olup olmadığını kontrol ediyoruz

     Dim basamakToplami As Byte = 0

     For i As Integer = 0 To

          basamakToplami += CByte(TcNo.Substring(i, 1))

     Next

     If (basamakToplami Mod 10).Equals(CByte(tmpTcNo Mod 10)) = False Then Return False

     'Yukarıdaki tüm testler başarılı oldu ise Tc numarası geçerli bir Tc Numarası olabilir demektir.

     Return True

End Function

 

Bu makalede anlatılan kod öreneğini ekteki projede bulabilirsiniz.

TcNoDogrulama.zip (45,67 kb)

 

Not: TC. Kimlik Numarası Sorgulamaları için;

http://tckimlik.nvi.gov.tr/Web ya da http://www.kimlikno.org adresleriniz ziyaret edebilirsiniz.


Posted by yavuz on 06 Temmuz 2008 Pazar 04:11
Permalink | Yorumlar (0) | Post RSSRSS comment feed