O Κώδικας του kamar με μερικές αλλαγές.
1. Άλλαξα το όνομα της συνάρτησης
2. Οι έλεγχοι γίνονται πλέον με τη δομή if ... /elif ... / else ...
3. Άλλαξα τα ονόματα μερικών μεταβλητών. Καλό είναι να αποφεύγουμε να χρησιμοποιούμε για ονόματα μεταβλητών τις reserved words της Python (στην προκειμένη περίπτωση την sum).
4. Ενσωμάτωσα την πρόταση του bold. Για την ακρίβεια δεν είναι λάθος ο κώδικας του kamar απλά είναι πιο απλό να το γράψεις με δύο "%"
def check_afm(afm):
"""
Checks the integrity of the personal tax number.
Author: marmako@gmail.com
"""
if afm.isdigit() == False:
msg = "Το ΑΦΜ: {0} δεν είναι έγκυρο.\n".format(afm)
msg += "Πρέπει να αποτελείται ΜΟΝΟ από ψηφία."
print(msg)
return False
elif len(afm) != 9:
msg = "Το ΑΦΜ: {0} δεν είναι έγκυρο.\n".format(afm)
msg += "Πρέπει να έχει εννέα ψηφία."
print(msg)
return False
else:
chck_numbers = [256, 128, 64, 32, 16, 8, 4, 2, 1]
length = len(chck_numbers) - 1
athroisma = 0
for i in range(length):
athroisma += (int(afm[i]) * chck_numbers[i])
ch_digit = int(afm[-1])
ypoloipo = (athroisma % 11) % 10
if ypoloipo == ch_digit :
return True
else:
return False
if __name__ == '__main__':
print(check_afm('000555248')) # Ακυρο ΑΦΜ
print(check_afm('000555240')) # Εγκυρο ΑΦΜ