CREATE OR REPLACE FUNCTION isvalid_tckn(tckn text) RETURNS bool AS $$ value = str(tckn) 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 $$ LANGUAGE 'plpython3u';
kullanım örneği:
select random_tckn() into temp t1 FROM generate_series(1,10000) select random_tckn, isvalid_tckn(random_tckn) from t1
kod için kaynak: https://muratcorlu.com/post/python-ile-tc-kimlik-numarasi-dogrulama/