מספרי כרטיס נראים חלופיים במבט ראשון, אבל תבנית מספר כרטיס אינה צורה אחת שחוזרת על עצמה—האורך משתנה מרשת לרשת, הספרות המובילות נושאות משמעות, והספרה האחרונה היא אריתמטיקה ולא הקצאה. הידיעה כיצד החלקים משתלבים היא מה שמאפשר להבדיל בין מספר בנוי כהלכה לבין מספר שנראה סביר, והיא מסבירה את רוב התנהגות האימות המוזרה שפוגשים בטפסי תשלום.
הסעיפים הבאים מפרקים את המספר לחלקיו, מתארים כיצד לקרוא מספר מקובץ כפי שהוא מודפס, ומסיימים בפרטים המעשיים שקובעים אם הטיפול בקלט ישרוד מפגש עם משתמשים אמיתיים.
שלושת החלקים של מספר כרטיס
כל מספר כרטיס הוא שרשור של שלושה שדות, הנכתבים בלי מפרידים כשהם נשמרים:
- קידומת המנפיק. היא כונתה היסטורית מספר זיהוי הבנק, וכיום היא מכונה מספר זיהוי המנפיק. הבלוק המוביל הזה מספר למערכת הניתוב לאיזו רשת שייך הכרטיס, ובמרבית המקרים גם איזה מוסד הנפיק אותו. רוחבו אינו קבוע; קיימות גם צורות קצרות יותר וגם ארוכות יותר, והאורך נרשם ואינו מנוחש.
- ספרות החשבון. זה החלק שהמנפיק מקצה. הדרישה היחידה היא ייחודיות בתוך הטווח של אותו מנפיק. זה אינו מספר לקוח שאפשר לפענח, ושתי ספרות חשבון עוקבות אינן נושאות יחס כלשהו זו לזו.
- ספרת הביקורת. ספרה אחת שמחושבת מכל האחרות באמצעות אלגוריתם Luhn. היא קיימת כדי לתפוס שגיאות הקלדה, ולא דבר אחר.
בקריאה משותפת התמונה פשוטה: חזית המספר אומרת מאיפה הכרטיס הגיע, האמצע הוא הקצאה שרירותית, והסוף הוא שומר מפני שגיאות הקלדה.
למה מספרי כרטיס באורכים שונים?
האורך מעולם לא תוקנן לערך אחד, מפני שמספור הכרטיסים צמח מכמה תכניות לאומיות וענפיות שאוחדו מאוחר יותר במקום להיכתב מחדש. התקן הבינלאומי שמסדיר את התבנית קובע גבול עליון של תשע עשרה ספרות ומשאיר את האורך המדויק לכל רשת ולכל מוצר.
בפועל פוגשים קבוצה קטנה של אורכים. שש עשרה ספרות הוא האורך הנפוץ ביותר וזה שאנשים מדמיינים כשהם שומעים את המילה כרטיס. חמש עשרה ספרות הוא התקן של American Express. קיימות גם צורות של שלוש עשרה וארבע עשרה ספרות, בעיקר במוצרים ותיקים או אזוריים, וחלק מהרשתות משתמשות בסידור ארוך יותר עבור סוגי כרטיס מסוימים.
ההשלכה החשובה לאימות היא שכלל שנכתב כשש עשרה ספרות בדיוק הוא כלל שגוי. הוא דוחה כרטיסים אמיתיים, והוא גם מסרב לנתוני בדיקה תקינים. כלל נכון מקבל טווח, בודק את הקידומת מול הציפיות של אותה רשת, ורק אחר כך מריץ את סכום הביקורת.
מה מספרת הספרה הראשונה?
הספרה המובילה היא סימון ענפי ולא שם של רשת, והמיפוי פומבי. היא מצמצמת את סוג המנפיק שאיתו מתמודדים לפני ששאר הקידומת מזהה את התכנית הספציפית.
| ספרה מובילה | מקטע ענפי |
|---|---|
| 1 ו-2 | חברות תעופה |
| 3 | נסיעות ובידור |
| 4 ו-5 | בנקאות ופיננסים |
| 6 | סחר קמעונאי ובנקאות |
| 7 | דלק |
| 8 | תקשורת |
| 9 | הקצאה לאומית |
הספרה הראשונה לבדה אינה מזהה רשת לעולם. טווחי כרטיסים חיים בתוך המקטעים האלה: הספרה ארבע שייכת למקטע הבנקאי, וטווח בתוכו משויך לרשת אחת, בעוד טווח אחר באותו מקטע שייך לרשת אחרת. זו הסיבה שזיהוי מותג דורש יותר מספרה אחת, וזו הסיבה שמזהה שנבנה על התו הראשון בלבד יסווג שגוי שיעור מפתיע מהקלטים.
איך קוראים מספר כרטיס מקובץ?
על הכרטיס ובמרבית הממשקים הספרות מופיעות בקבוצות, והקיבוץ הולך אחרי הרשת ולא אחרי כלל אוניברסלי. ארבע קבוצות של ארבע ספרות הוא הסידור המוכר לכרטיס בן שש עשרה ספרות; American Express מוצג בדרך כלל כארבע, שש וחמש, בהתאמה לחמש עשרה הספרות שלו. חלק מהממשקים מפרידים את הקבוצה הראשונה של שש ספרות כדי להבליט את קידומת המנפיק, ואחרים משאירים את המספר רציף.
עבור הקורא, הקיבוץ הוא אמצעי זיכרון. עבור מפתח זה תצוגה בלבד, וההבחנה הזו מייצרת תקלות אמיתיות: שדה שדוחה מספר מודבק מפני שההדבקה כללה רווחים דוחה בעצם את התבנית שבה הכרטיס עצמו מודפס. שומרים ספרות, מציגים קבוצות, וממירים בין השניים בקצוות.
תבנית אינה אימות
קל להתייחס לצורה מוכרת כהוכחה לאמיתות. זו אינה הוכחה. כל קידומת יכולה להצטרף לכל ספרות אמצעיות, עם ספרת ביקורת סוגרת שמחושבת בהתאם, ולכן מחרוזת שנראית בדיוק כמו כרטיס מוכר יכולה להיות בדיונית לחלוטין.
כל מה שנכתב במאמר הזה מתאר מבנה. הוא אינו אומר דבר על קיומו של חשבון, על פעילות הכרטיס או על כך שתשלום יאושר, מפני שאף אחת מהשאלות האלה אינה נענית מבדיקת הספרות. כל המספרים שהמחולל באתר הזה מפיק נמצאים בדיוק בקטגוריה הזו: נכונים בתבניתם, ומעולם לא הונפקו. השימוש בהם הוא לבדיקות תוכנה בלבד.
למפתחים: ניקוי קלט בלי לאבד מידע
האמת הלא נוחה בשדות של מספר כרטיס היא שמשתמשים מקלידים בהם בדרכים בלתי צפויות. הם מדביקים מדואר אלקטרוני עם רווחים, הם כוללים תו נגרר משדה קודם, הם מקלידים מקף במקום שבו צריך להיות רווח. ניקוי כזה הכרחי; ביצועו ברשלנות הוא הדרך שבה קלט תקין נהרס.
רצף עבודה סביר נראה כך. מקצרים את הקצוות. מסירים את תווי ההפרדה שאמורים להיסבל ולא את כל התווים שאינם ספרות, כך שאותיות מפיקות שגיאה ברורה במקום להימחק בשקט. שומרים את התוצאה כמחרוזת לאורך כל חייה, מפני שטיפוס מספרי יפיל אפס מוביל וישנה את משמעות הערך. משווים את האורך המנוקה לטווח של הקידומת שזוהתה. מריצים את סכום הביקורת אחרון.
לאחר מכן יש להחליט כיצד מוצג מה שהתקבל. שדה שמעצב את עצמו תוך כדי הקלדה נעים במקלדת שולחנית ויכול להיות עוין בטלפון, שם הסמן קופץ ומקש המחיקה מתנהג באופן בלתי צפוי. אם מקבצים ספרות תוך כדי הקלדה, כדאי לבדוק את המקרה של תיקון טעות באמצע המחרוזת, ולא רק בסופה.
גם הודעות הכשל צריכות להישאר נפרדות. קצר מדי, תווים לא נתמכים, קידומת לא מוכרת וסכום ביקורת שנכשל הם ארבע בעיות שונות, וטופס שמדווח על כולן כמספר כרטיס שגוי מאריך את תהליך הפענוח עבור המשתמש ועבור מי שכתב את הקוד.
בדיקת מספר בכלי לכרטיסים
כשצריך מספר בעל צורה מסוימת—רשת אחת, אורך אחד, קידומת אחת—מחולל מספרי הכרטיס מפיק אותם בלי חשבון ומאפשר לבחור את הרשת במפורש או להשאיר את הבחירה אקראית. מצב ההשלמה שימושי כשכבר יש ביד חלק מערך ורוצים למלא את הספרות הלא ידועות באופן עקבי עם השאר.
שני עמודים קשורים מעמיקים יותר. השוואת הרשתות מפרטת את הטווחים המפורסמים ואת האורכים שמתלווים אליהם, ומסלול האימות הופך את עצת הסדר שלמעלה לרצף בדיקות ממשי.
צעדים הבאים
כדאי לבדוק טופס קיים אחד מול הסדר שתואר כאן—אורך, אחר כך תווים, אחר כך קידומת, ולבסוף סכום ביקורת—ולאשר שכל כשל מפיק הודעה משלו. לאחר מכן יש להפיק סט קטן של מספרים שמשתרע בכוונה על יותר מאורך אחד, כדי שלאדם הבא שיערוך את כלל האימות יהיה מול מה להתנסות.