ניתן לקרוא כאן על אופן חישוב ספרת ביקורת בתעודת זהות. כדי להקל על החישוב כתבתי סקריפט שמבצע את החישוב. הסקריפט מטפל במצבים החריגים הבאים:
- קבלת מספר שמכיל פחות מ- 8 ספרות. במצב זה יתווספו "אפסים" מובילים עד להשלמה ל- 8 ספרות.
- קבלת מספר שמכיל יותר מ- 8 ספרות.
- הכנסת קלט משובש (מכיל תווים שאינם ספרות).
הורדה: כאן
שימוש: python calculateID.py 12345678
הסבר: 12345678 הוא מספר תעודת זהות
הערה: דווחו על באגים 🙂
יהיה exception של list index out of range. במקום רק להדפיס את זה תצא מן התוכנית באופן מפןרש באמצעות exit:
[code]
exit("Error: Missing argument (Usage: id ID_Numbern")
[/code]
נ.ב
המערכת שלך מאוד מציקה, כאשר שוכחים שדה צריך לכתוב את הכל מחדש. למה אתה לא עושה ואדליציה באמצעות JS?
ההערה לגבי הקוד נכונה.
לגבי המערכת: לא אני כתבתי אותה. מדובר ב- wordpress ואני צריך לבדוק אם יש פתרון לבעיה שהצגת.
יש פיתרון, hack the source :D.
a cooler version
id = 12345678
result = 10 – (reduce(lambda x, y: int(x) + int(y), reduce(lambda x, y: x+y, map(lambda x: str(int(x[0]) * x[1]), zip(list(id), map(lambda x: bool(x % 2) + 1, range(len(id))))))) % 10)
result = result * abs(bool(result == 10) – 1)
tr = lambda i, d : d if i%2==1 else sum([int(k) for k in str(d * 2)])
def isvalid_userid(userid):
return (userid % 10) == (-sum([tr(i, int(d)) for i, d in enumerate(str(userid // 10))]) % 10)