תפריט

אימות מספר מס: מה ספרת ביקורת יכולה להוכיח

אימות מספר מס תופס שגיאות הקלדה ולא מרמה. בחלק ממספרי המס מוטבעת ספרת ביקורת ובאחרים לא, ולכן יש לבנות את שכבות הבדיקה נכון.

פורסם

  • מספר מס
  • אימות
  • נתוני בדיקה

אימות מספר מס הוא הנוהג לבדוק מזהה מס לפני שהוא נשמר, לפני שמנפיקים נגדו חשבונית או לפני שמדווחים עליו—וזה גם השדה שבו הציפיות נקבעות לעתים תכופות גבוה מדי. בדיקה מתוכננת היטב תעצור ספרות שהוחלפו זו בזו מלהגיע אל מסד הנתונים. היא לא תאמר אם העסק קיים, אם המספר הונפק אי פעם, או אם לחברה שמאחוריו יש זכאות כלשהי.

מאמר זה מסביר מהו מזהה מס, מדוע תבניות אחדות ניתנות לבדיקה אריתמטית ואחרות לא, כיצד לבנות אימות בשכבות כך שכל שכבה תשיב על שאלה שהיא אכן מסוגלת להשיב עליה, ומדוע אסור לדווח על כשל בבדיקה כעל הודעה שחברה חסרה.

מהו מזהה מס?

זהו המזהה שרשות מס מקצה לנישום. זו ההגדרה כולה, והיא רחבה במכוון, מפני שמדינות מארגנות את רישום המס בדרכים שונות מאוד.

מדינה אחת עשויה להחזיק מספר מס לאומי אחד שמשמש לכל דבר. אחרת עשויה להחזיק מספרים נפרדים למסים שונים, כך שעסק מחזיק מזהה אחד למיסים ישירים ומזהה אחר למס ערך מוסף. אחרת עשויה להשתמש במספר שקדם למערכת המס כולה, לאחר שהונהג למטרה מנהלית שונה ואומץ מאוחר יותר לצורכי מס. תחומי שיפוט אחדים משתמשים במזהה אחד שמשמש גם כמספר רישום החברה; אחרים מחזיקים אותם בנפרד בהחלט.

שתי השלכות נובעות מכך מיד. הראשונה: מספר מס אינו שדה אחד במציאות אלא משפחה של שדות שהרכבה תלוי במדינה. השנייה: כל אמירה בסגנון של מספר מס תמיד מכיל כך וכך אינה נכונה במקום כלשהו, ולכן האימות חייב להיכתב בהגנתיות.

מדוע בחלק ממספרי המס מוטבעת ספרת ביקורת?

מפני שהרשות המנפיקה עיצבה אותם כך. ספרת ביקורת היא יתירות אריתמטית: התו האחרון, או תו המוטבע באמצע, מחושב מן האחרים לפי כלל מפורסם, כך שתו אחד שהוקלד שלא נכון או שהוחלף בדרך כלל מפיק ערך שנכשל בכלל.

במקום שבו מדינה מפרסמת כלל כזה, הטמעתו מועילה באמת. הוא תופס את שגיאות ההקלדה הנפוצות ביותר ברגע ההזנה, בלי קריאה לרשת, בלי תלות חיצונית ובלי שאלת פרטיות. הוא זול, מהיר ודטרמיניסטי—והוא הבדיקה החזקה ביותר שאפשר לבצע מקומית.

במקום שבו מדינה אינה מפרסמת כלל כזה, המזהה הוא פשוט הקצאה: הרשות הקצתה אותו ורשמה אותו, ושום אריתמטיקה אינה יכולה להבדיל בין מספר אמיתי למומצא. זה נפוץ יותר מכפי שמפתחים מצפים. כמה תחומי שיפוט גדולים מאוד מנפיקים מספרים עוקבים פשוטים בלי שום יתירות.

ההוראה הנובעת מכך חדה. יש להטמיע אלגוריתם ספרת ביקורת רק במדינות המסוימות שבהן אומת שהאלגוריתם מפורסם ושהוא עודו תקף. אין לנחש אלגוריתם מתוך צורת המספר, ואין להניח שמפני שתבנית של מדינה אחת נראית דומה לשל אחרת, אותו כלל חל.

מה המספר נראה כמו מה באמת אפשר לבדוק
אלגוריתם מפורסם עם ספרת ביקורת מכלול התווים, האורך וכלל החשבון
הקצאה פשוטה בלי כלל מפורסם מכלול התווים ומגבלת אורך נדיבה בלבד
תבנית עם קידומת מדינה או רשות שהקידומת מתאימה למדינה הנטענת
תבנית שמשמשת גם כמספר רישום מה שהפנקס עצמו יכול לאשר

האם מעבר של אימות אומר שהמספר אמיתי?

לא. תוקף התבנית והקיום הם שתי תכונות שונות, וערבוב שלהן הוא שגיאת התכנון הנפוצה ביותר בתחום הזה.

מספר מושלם מבחינה תחבירית יכול לא להשתייך לאיש. כל מי שמבין את התבנית יכול להפיק מספר שממלא כל כלל מקומי, כולל ספרת הביקורת, מפני שספרת הביקורת נועדה לתפוס תאונות ולא יריבים. מן הצד האחר, מספר יכול להיות אמיתי לחלוטין ולהיפסל בידי הכלל המקומי שלכם, אם הכלל נכתב מול פריסה ישנה יותר, מול מדינה אחרת, או מול מסמך שעיצב את המספר באופן חריג.

את הקיום קובעת רק הרשות שהנפיקה את המזהה. במקום שבו רשות מס מפרסמת מתקן תשאול רשמי, המתקן הוא התשובה לשאלת הקיום; במקום שבו אינה מפרסמת, ייתכן שאת הקיום אפשר לאשר רק ממסמכים שהעסק מספק. זו הבטחה חלשה במובהק, וראוי לתאר אותה ככזאת ולא לעטות עליה שם של אימות.

יש גם דקות שמפתיעה צוותים: גם רישום מאושר הוא עובדה נקודתית בזמן. מספר יכול להיות תקף היום ולהימחק בחודש הבא, ולכן שמירת מטמון תוקפנית של המספר הזה תקף בסופו של דבר תתנגש עם המציאות. יש לשמור מטמון במכוון, ולהעדיף לשמור את התשובה עם חותמת זמן על פני שמירתה לנצח.

כיצד יש לבנות את האימות בשכבות?

בשלושה מעברים, לפי סדר העלות, כשהזול והבטוח ביותר ראשון.

המעבר הראשון מקומי ומבני: האם השדה אינו ריק, האם הוא בתוך אורך מרבי נדיב, האם הוא מכיל רק תווים שמופיעים בתבנית כלשהי, והאם המדינה הנטענת מתאימה לקידומת שמופיעה. מעבר זה כמעט אינו פוסל קלט סביר; תפקידו לתפוס ערכים ריקים וערכים פגומים בבירור.

המעבר השני ספציפי למדינה: יש להחיל את כלל ספרת הביקורת המפורסם במקום שבו הוא מוחזק, ורק שם. יש לדווח על התוצאה כאזהרת שגיאת הקלדה הנספחת לשדה, בנוסח שמבקש לבדוק את הערך שוב, מפני שזה בדיוק מה שכשל בספרת ביקורת אומר.

המעבר השלישי הוא החיפוש הסמכותי, א-סינכרוני ולעולם לא חוסם את הטופס. יש לו שלוש תוצאות שראוי להבדיל ביניהן—אושר, לא נמצא ולא זמין—והוא צריך להיות מסוגל לומר איזו מהן התרחשה. חיפוש שאינו מבדיל בין אין מספר כזה לבין השירות מושבת יפסול בסופו של דבר לקוח לגיטימי ביום רשת גרוע.

למפתחים: שגיאות, מטמון ונתיבי ביקורת

עבודת התכנון כאן היא בעיקרה כנות בטיפול בשגיאות. כל שכבה צריכה להפיק תוצאה ניתנת להבחנה, וההודעה שהמשתמש רואה צריכה לנקוב בשכבה שנכשלה. ההודעה שלא הצלחנו להגיע לרשות המס והפרטים נשמרו ונבדוק שוב היא הודעה שמישה. ההודעה על מספר מס שגוי הנספחת לערך שהמשתמש העתיק מתעודה רשמית אינה כזאת.

מוטב לשקול סוג תוצאה מפורש ולא ערך בוליאני. ארבעה מצבים—לא מאומת, צורה תקפה, חיפוש אושר וחיפוש לא נמצא—מכסים את הקרקע בלי לכפות הבחנה שהמערכת אינה יכולה לעשות. ערך בוליאני ממוטט אותם ומוודא שערך לגיטימי כלשהו ייחשב בסוף כלא נכון.

שמירת המטמון צריכה להיות א-סימטרית. תוצאה מאושרת שווה להחזיק לתקופה סבירה; תוצאת לא נמצא צריכה לפוג במהירות, מפני שרישומים משתנים והיעדרות מאתמול היא סיבה גרועה לפסול את הלקוח של היום. תוצאה של חוסר זמינות אינה צריכה להישמר במטמון כשלילית כלל.

יש לתעד מה נבדק בלי להפוך את היומן לעותק של מסד נתוני הלקוחות. יש לרשום את עצם הבדיקה ואת זמנה, את השכבה שהופעלה ואת התוצאה; אין לשכפל את המזהה הגולמי לתוך מערכות שאינן זקוקות לו. במקום שבו המזהה חייב להישמר, יש להתייחס אליו כאל נתונים עסקיים באותה זהירות כמו לכל דבר אחר—ולהחזיק ערכים מופקים נפרדים בבירור מן הערכים האמיתיים, וזה בדיוק מה ששדות מזהה המס הבדיוניים באתר הזה נועדו לו. המאמר על תבניות מספר VAT מכסה את החבר הנפוץ ביותר במשפחה הזאת, והמאמר על נתוני חברה לבדיקה מראה כיצד נראית יתרתה של רשומת עסק בדיונית.

צעדים הבאים

יש לעשות מפקד של כל בדיקת מספר מס במוצר ולתייג כל אחת מהן בשכבה שהיא מיישמת. כל בדיקה שפוסלת ערך על בסיס תבנית מנוחשת צריכה להיות מורדת לדרגת אזהרה, וכל הודעה שאומרת שאין דבר כזה על סמך בדיקה אריתמטית צריכה להיכתב מחדש כך שתאמר מה נבדק באמת. לאחר מכן יש להשתמש במחולל נתוני החברה כדי להפיק רשומות לכמה מדינות ולוודא שהטופס מטפל במדינה שאינו יודע עליה דבר בלי לסרב לקלוט את הערך מלכתחילה.

המשך קריאה

מדריכים בנושא מחולל נתוני חברה לבדיקה