איך עובדות בדיקות checksum
מספרי כרטיסים, IBANs, מספרי זיהוי מס וכתובות קריפטו כולם מכילים ספרה או שתיים נוספות נסתרות, שנחושבות משאר הספרות. טעות הקלדה אחת גורמת לכך שהחישוב לא יתאים – וזו הסיבה שמאמת יכול לזהות טעות הקלדה מיד, באופן לא מקוון, בלי לבקש עזרה מבנק או מרשת בלוקצ'יין.
מהו checksum
Checksum (או ספרת בדיקה) הוא ריבוי מכוון של ספרות. כאשר מספר ניתן, אחת או יותר מספרותיו אינן נבחרות באופן חופשי: הן נחושבות משאר הספרות לפי נוסחה קבועה. כל מי שמכיר את הנוסחה יכול מאוחר יותר לחשב מחדש את אותן ספרות ולהשוות אותן. אם הן תואמות, המספר עקבי מבחינה פנימית. אם לא, נעשתה טעות הקלדה, קריאה שגויה או נזק לנתונים.
זה כל מה שמבטיח checksum. הוא אינו מציין דבר על קיומו של החשבון, מי הבעלים שלו או מה הוא מכיל – נקודה שכל המאמתים באתר הזה חוזרים עליה שוב ושוב, מכיוון שקל להתבלבל בין השניים.
דוגמה מעשית 1 – אלגוריתם לונה למספרי כרטיסים
חברת ויזה, מאסטרקארד ורוב כרטיסי התשלום האחרים משתמשות באלגוריתם לונה. קחו את הדוגמה הקלאסית 7992 7398 713. החל מהספרה הימנית ביותר, הכפילו כל ספרה שנייה פי שניים; אם התוצאה היא מספר בן שתי ספרות, חברו את הספרות שלו יחד. לאחר מכן חברו את כל הערכים.
| ספרה | מיקום מימין | הוכפל? | נספר כ |
|---|---|---|---|
3 | ספרה לבדיקת סיכום | — | 3 |
1 | השנייה מימין | 1 × 2 = 2 | 2 |
7 | השלישית | — | 7 |
8 | הרביעית | 8 × 2 = 16 → 1 + 6 | 7 |
9 | החמישית | — | 9 |
3 | השישית | 3 × 2 = 6 | 6 |
7 | השביעי | — | 7 |
2 | השמיני | 2 × 2 = 4 | 4 |
9 | התשיעי | — | 9 |
9 | העשירי | 9 × 2 = 18 → 1 + 8 | 9 |
7 | האחד-עשר | — | 7 |
העמודה שמימין מצטברת ל-3 + 2 + 7 + 7 + 9 + 6 + 7 + 4 + 9 + 9 + 7 = 70. השבעים מתחלק ב-עשר, ולכן המספר תקף. שנה ספרה בודדת אחת והסכום כבר לא יהיה מכפלה של עשר. נסה זאת בכלי בדיקת תקפות כרטיס אשראי – הוא מבצע את החישוב הזה בדיוק על המכשיר שלך.
דוגמה מעשית 2 – סכום משוקל (ISBN-10)
רבים ממספרי התעודות הלאומיות משתמשים בסכום משוקל: כפל כל ספרה במשקל קבוע, חיבור כל הערכים ובדיקת השארית. ISBN-10 הוא הדוגמה הטובה ביותר. עבור 0-306-40615-2 המשקלים נעים מ-10 ועד 1:
0×10 + 3×9 + 0×8 + 6×7 + 4×6 + 0×5 + 6×4 + 1×3 + 5×2 + 2×1 = 132
132 שווה בדיוק ל-11 × 12, כך שהשארית של החילוק ב-11 היא אפס וה-SBN תקין. מספרי CPF בברזיל, PESEL בפולין ועשרות מזהי זהות אחרים פועלים לפי אותו דפוס עם משקלים ומודולוס משלהם – ולכן בדקן מזהי קבוצות אחד יכול לבדוק אלפי מספרים כאלה בתוך שנייה.
דוגמה מעשית 3 – IBAN ומודולוס 97
מספרי חשבונות בנק בינלאומיים משתמשים בתקן ISO 7064 מודולוס 97-10, שיטה חזקה יותר עם שתי ספרות בדיקה. הנה הדוגמה הסטנדרטית: GB82 WEST 1234 5698 7654 32:
- בדקו את אורך המספר לפי המדינה: מספר IBAN בריטי מכיל 22 תווים. ✓
- העבירו את ארבעת התווים הראשונים לסוף:
WEST12345698765432GB82. - החליפו כל אות בשני ספרות (A = 10 … Z = 35): W→32, E→14, S→28, T→29, G→16, B→11, מה שנותן
3214282912345698765432161182. - חלקו את המספר הזה ב-97. השארית חייבת להיות בדיוק 1 — וכך הוא.
מכיוון ש-97 הוא מספר ראשוני וגדול יותר מכל החלפה של שני תווים, המודולו 97 תופס כל שגיאה של תו בודד וכל החלפה של תווים; רק כ-אחד מכל 97 מחרוזים אקראיים יעבור במקרה. המאמת IBAN מציג האם כל שכבה מהן עוברת או נכשלת.
כתובות קריפטו: סיכומי בדיקה שנבנו מתוך גיבובים.
כתובות ביטקוין ואת'ריום מעלות את הרף, מכיוון שטעות הקלדה שם שולחת כסף לאף אחד, לתמיד. כתובות ביטקוין ישנות (1…, 3…) משתמשות בבאז58צ'ק: תוכן הכתובת עובר דרך SHA-256 פעמיים והארבעה הבייטים הראשונים של התוצאה נוספים כסיכום בדיקה. תו שגוי אחד משנה את הגיבוב לחלוטין, כך שהסיכוי שטעות תחמוק היא כאחת מתוך ארבעה מיליארד. כתובות bc1… חדשות יותר משתמשות בבך32 או בך32מ, קוד מתקן שגיאות שמבטיח זיהוי של כל טעות הנוגעת עד ארבעה תווים. הEIP-55 של את'ריום מסתיר את סיכום הבדיקה שלו בתבנית של אותיות גדולות וקטנות.
הבדקן כתובת Bitcoin והבדקן כתובת Ethereum מיישמים אלגוריתמים אלה בדפדפן ובודקים את עצמם מול וקטורי הבדיקה הרשמיים בכל פעם שדף נטען.
סוגי תוכניות בקצרה
| תוכנית | נמצא בשימוש על ידי | תופס טעויות | הסיכוי שטעות אקראית תעבור |
|---|---|---|---|
| אלגוריתם לונה (mod 10) | כרטיסי אשראי וחיוב, IMEI, ומספרי זיהוי לאומיים רבים | כל שגיאת ספרה בודדת ורוב החילופים הסמוכים | כ-1 מתוך 10 |
| ISO 7064 מודולו 97-10 | IBAN, וכן מספרי מס וחברות מסוימים | כל שגיאה בודדת וכל החלפת ספרות. | כ-1 מתוך 97. |
| סכום משוקלל, מודולו 10 או 11 | ISBN-10, CPF של ברזיל, PESEL של פולין ומספרי זיהוי רבים נוספים. | שגיאות בודדות ורוב החלפות הספרות. | כ-1 מתוך 10 או 1 מתוך 11. |
| Base58Check (SHA-256 כפול, 4 בייטים) | כתובות ביטקוין ישנות (1…, 3…) | כל שגיאת הקלדה תגרום לתוצאה לא תקינה ברוב המקרים | בערך 1 מתוך 4 מיליארד |
| Bech32 / Bech32m (קוד BCH) | Bitcoin SegWit & Taproot addresses (bc1…) | מובטח: כל שגיאה נוגעת עד 4 תווים. | פחות מ-1 מתוך מיליארד. |
| EIP-55 (קידוד keccak-256) | כתובות Ethereum | טעויות כתיב, באמצעות דפוס של אותיות גדולות וקטנות. | רמה נמוכה מאוד עבור קלט בתערובת של אותיות גדולות וקטנות. |
למה כדאי שמאמת ההתאמות יפעל על המכשיר שלך
כל מה שצוין לעיל הוא חישובים אריתמטיים על ספרות שכבר קיימות אצלך. אין שום סיבה שמאמת ההתאמות ישלח מספר כרטיס, תעודת זיהוי מס או כתובת ארנק לשרת — ויש סיבה טובה מאוד שלא לעשות זאת. כל מאמתי ההתאמות באתר הזה פועלים מקומית; רשימת הכלים הלא מקוונים מקבצת אותם, והמדריך שלנו לבדיקה האם כלי מסוים מעלה את הנתונים שלך מראה כיצד לאשר זאת עבור כל אתר תוך עשרים שניות.
FAQ
האם תוקף ההתאמה מעיד שהמספר אמיתי או פעיל?
לא. התאמת ההתאמות רק מוכיחה שהספרות עקביות בינן לבין עצמן — שייתכן שהמספר קיים. היא אינה יכולה לספר לך אם החשבון פתוח, מי הבעלים שלו או מה יתרתו. כל מאמתי ההתאמות באתר הזה מציינים זאת בדף, מכיוון שההבחנה הזו חשובה.
מה הסיכוי שמספר שגוי עדיין יעבור את בדיקת ההתאמה?
זה תלוי בשיטה. ספרת בדיקה בודדת מסוג mod-10 מאפשרת לכ-1 שגיאה אקראית מתוך 10 לעבור; שיטת mod 97 של IBAN מאפשרת לכ-1 מתוך 97 לעבור; תאימות Base58Check בת 4 בייטים מאפשרת לכ-1 מתוך 4 מיליארד לעבור. התכונה החשובה היא שטעויות אנוש נפוצות — ספרה אחת שגויה או שתי ספרות שהוחלפו — נתפסות על ידי כולן.
למה לחלק מהמזהים אין בכלל סכום ביקורת?
שיטות ישנות או פשוטות יותר נועדו להתבצע דרך רישום במקום בבדיקה מקומית, וחלק ממערכות המספור קדמו לפרקטיקה זו. עבורן, מאמת יכול לבדוק רק את האורך והפורמט.
האם בטוח להדביק את מספר הכרטיס או תעודת הזהות שלי למאמת?
רק אם התהליך מתבצע על המכשיר שלך. סכום ביקורת הוא חישוב אריתמטי על ספרות שכבר ברשותך, כך שאין סיבה לגיטימית שהמאמת ישלח אותן לשרת. ניתן לאשר שכלי פועל באופן מקומי באמצעות מבחן מצב טיסה המתואר במדריך שלנו לבדיקה האם הכלי מעלה את הנתונים שלך.
מה ההבדל בין סכום ביקורת, גיבוב והצפנה?
סכום ביקורת הוא ספרת בדיקה קצרה שנועדה לזהות טעויות הקלדה מקריות. גיבוב קריפטוגרפי הוא טביעת אצבע ארוכה שנועדה לאפשר זיהוי של שינוי מכוון ואי-אפשרות לשחזור הנתונים המקוריים. הצפנה משנה את הנתונים כך שניתן יהיה לקרוא אותם רק עם מפתח. Base58Check משתמש בגיבוב כדי ליצור את סכום הביקורת שלו, ולכן קשה מאוד לרמות אותו בטעות.