לא פעם ודאי יצא לכם לשלב שדה של מספר תעודת זהות בטפסים המוטמעים באתרי אינטרנט ובפיסות תוכנה אחרות. כחלק מאימות הנתונים לפני שליחת הטופס ניתן לוודא את תקינות המידע שהוזן לשדות, ולדאוג למשל שבשם הפרטי לא יהיו מספרים, שבכתובת הדוא"ל לא יהיו רווחים או תווים אסורים אחרים, וכך הלאה. אך כיצד מאמתים תקינות של מספר תעודת זהות? האם ספירה של 9 ספרות מספיקה? ובכן, לא בהכרח.
מאחורי מספרי תעודת הזהות בישראל ישנו אלגוריתם קל ופשוט המאפשר לוודא את תקינותם. שימו לב: האלגוריתם לא יכול לוודא אם קיים אדם בעל מספר תעודת הזהות הזו או לשייך מספר לאדם, אך הוא בהחלט יודע להגיד האם המספר שהוזן הוא מספר תעודת זהות תקין או שמא מדובר ברצף אקראי וחסר משמעות של מספרים.
כך זה עובד
ראשית, נבין את המבנה של מספר תעודת הזהות, אותו נחלק לשני חלקים:
- החלק הראשון הוא מספר בעל 1 עד 8 ספרות.
- החלק השני הוא ספרת הביקורת, שנמצאת מימין לספרות של החלק הראשון.
כדי לעבוד עם האלגוריתם, על מספר תעודת הזהות להיות בעל 9 ספרות. אם זה לא קורה, וזה אכן יכול שלא לקרות – שכן החלק הראשון של המספר יכול להיות מורכב גם מפחות מ-8 ספרות, המיקומים החסרים יושלמו באמצעות אפסים מצד שמאל. לדוגמה, עבור מספר תעודת הזהות 123456, החלק הראשון הוא 12345 וספרת הביקורת היא 6. במספר אין 9 ספרות ועל כן הוא יושלם ל-000123456. כעת, כשיש לנו מספר תעודת זהות בעל 9 ספרות, נוכל לעקוב אחר האלגוריתם.
בהינתן המספר 123456789, ננסה לבדוק האם מדובר במספר תעודת זהות תקין.
שלב 1: נכתוב את מספר תעודת הזהות, ומתחתיו רצף של הספרות 1 ו-2, המתחיל ב-1 וגם מסתיים ב-1, באופן הבא:
123456789
121212121
שלב 2: נכפיל כל ספרה בספרה שמתחתיה ונכתוב את התוצאות אחת ליד השניה, באופן הבא:
1,4,3,8,5,12,7,16,9
שלב 3: כל מספר גדול מ-9 שקיבלנו, יהפוך להיות סכום שתי הספרות שמרכיבות אותו:
1,4,3,8,5,3,7,7,9
שלב 4: נסכום את כל הספרות שהתקבלו, ונגיע ל-47. מספר זה אינו מתחלק ב-10 ללא שארית ועל כן הוא איננו מספר תעודת זהות תקין. אם היה מתקבל מספר שמתחלק ב-10 ללא שארית, הרי שהיה מדובר במספר תעודת זהות תקין.
מציאת ספרת הביקורת
לאלגוריתם מספר תעודת הזהות הישראלית ישנו נדבך נוסף: מציאת ספרת הביקורת בהינתן החלק הראשון בלבד של מספר תעודת הזהות. למשל, נוכל למצוא את ספרת הביקורת שבשילוב המספר 12345678 תספק מספר תעודת זהות תקין.
שלב 1: נכתוב את רצף המספרים של החלק הראשון של מספר תעודת הזהות, ומתחתיו רצף של הספרות 1 ו-2, המתחיל ב-1 ומסתיים ב-2, באופן הבא:
12345678
12121212
שלב 2: נכפיל כל ספרה בספרה שמתחתיה ונכתוב את התוצאות אחת ליד השניה, באופן הבא:
1,4,3,8,5,12,7,16
שלב 3: כל מספר גדול מ-9 שקיבלנו, יהפוך להיות סכום שתי הספרות שמרכיבות אותו:
1,4,3,8,5,3,7,7
שלב 4: נסכום את כל הספרות שהתקבלו, ונגיע ל-38. כעת עלינו למצוא את הספרה שמשלימה את המספר לכזה המתחלק ב-10 ללא שארית, ובמקרה זה מדובר כמובן בספרה 2. מכאן נסיק שמספר תעודת הזהות השלם הינו 123456782.
והנה הקוד…
בשפת JavaScript:
function is_israeli_id_number(id) {
id = String(id).trim();
if (id.length > 9 || isNaN(id)) return false;
id = id.length < 9 ? ("00000000" + id).slice(-9) : id;
return Array.from(id, Number).reduce((counter, digit, i) => {
const step = digit * ((i % 2) + 1);
return counter + (step > 9 ? step - 9 : step);
}) % 10 === 0;
}