Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@muratcorlu
Created March 11, 2012 20:44
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save muratcorlu/2018156 to your computer and use it in GitHub Desktop.
Save muratcorlu/2018156 to your computer and use it in GitHub Desktop.
Python ile TC Kimlik numara doğrulama
# coding=utf-8
"""
Kurallar:
* 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.
Kurallar http://www.kodaman.org/yazi/t-c-kimlik-no-algoritmasi adresinden alınmıştır.
"""
def isValidTCID(value):
value = str(value)
# 11 hanelidir.
if not len(value) == 11:
return False
# Sadece rakamlardan olusur.
if not value.isdigit():
return False
# Ilk hanesi 0 olamaz.
if int(value[0]) == 0:
return False
digits = [int(d) for d in str(value)]
# 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.
if not sum(digits[:10]) % 10 == digits[10]:
return False
# 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.
if not (((7 * sum(digits[:9][-1::-2])) - sum(digits[:9][-2::-2])) % 10) == digits[9]:
return False
# Butun kontrollerden gecti.
return True
@patateslib
Copy link

305

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment