ספרת ביקורת
ספרת ביקורת היא ספרה הנוספת, בעיקר במערכות מידע, למספר נתון, כדי לזהות טעות שנעשתה בעת העתקתו.
במספרה של תעודת הזהות הישראלית, למשל, הספרה הימנית ביותר היא ספרת ביקורת. גם במספר של כרטיס אשראי ובמספר חשבון בנק נכללת ספרת ביקורת, וכך במספרים נוספים. כאשר אדם מוסר או מקליד מספר מסוג זה, קל לבדוק מיידית את תקינותו באמצעות ספרת הביקורת, עוד לפני הפנייה למאגר הנתונים לשם מציאת מספר זה. ספרת הביקורת היא פונקציה של כל יתר הספרות שבמספר המתאים לה, ובדיקת נכונותה נעשית באמצעות הפעלת פונקציה זו על המספר הנתון. ניתן להמחיש זאת באמצעות חישוב ספרת ביקורת באמצעות אלגוריתם לוהן (Luhn). אלגוריתם זה, פותח על ידי איש מעבדות IBM בשנות ה-50 ומשמש, בין היתר, לחישוב ספרת הביקורת במספר הזהות בישראל, ספרת הביקורת בכרטיסי אשראי ועוד.
תוכן עניינים |
[עריכה] ספרת ביקורת במספר הזהות בישראל
מספר הזהות בישראל, מורכב מתשע ספרות, שהימנית שבהן היא ספרת הביקורת. לכל אחת משמונה הספרות שמשמאל ניתן משקל: 1 (לספרה ראשונה), 2, 1, 2, 1, 2, 1, 2.
כל ספרה מוכפלת במשקל שלה, וכל הספרות של התוצאות מחוברות יחדיו. אם התוצאה של הכפלת הספרה במשקלה היא בת שתי ספרות, מסוכמת כל אחת משתי הספרות של התוצאה (כלומר המספר הדו ספרתי מופרד לשני מספרים בעלי ספרה אחת, המתחברים לכל שאר הספרות). את הסכום המתקבל יש להשלים לכפולה הקרובה של 10 (כלפי מעלה. לדוגמה: אם הסכום שהתקבל הוא 32, ההשלמה תהיה 8). ההפרש שאותו נדרש להשלים הוא ספרת הביקורת.
דוגמה: מספר הזהות הוא 54370042-1. מכפלות שמונה ספרותיו השמאליות של מספר זה במשקלות שלהן הן:
5×1 = 5, 4×2 = 8, 3 ×1 = 3, 7×2 = 14, 0×1 = 0 ,0 ×2 = 0,4 ×1 = 4, 2 ×2 = 4
סכום ספרותיהן הוא 29 =4 + 4 + 0 + 0 + (1+4) + 3 + 8 + 5 ולכן ספרת הביקורת היא 1 (המשלים של 29 ל-30).
מדוגמה זו קל לראות שכל טעות בספרה אחת במספר הזהות תזוהה באמצעות בדיקת ספרת הביקורת, וגם החלפה בין שתי ספרות סמוכות תזוהה, אלא אם ההחלפה נעשתה בין הספרות 0 ו-9. אין ודאות בזיהוי של טעות בשתי ספרות או בהחלפה בין שתי ספרות שאינן סמוכות. הפונקציה המשמשת בחישוב מספר הזהות אינה היחידה המקובלת, ובמספרים אחרים מקובלות פונקציות אחרות, המבוססות על עיקרון דומה. (ההשלמה לכפולה הקרובה של 10 אינה מועילה מבחינת איכות ספרת הביקורת, אך היא מפשטת את האלגוריתם המשמש לבדיקתה).
ספרת ביקורת מהסוג המתואר לעיל מאפשרת זיהוי של טעות, אך היא אינה מאפשרת את תיקון הטעות. ספרות ביקורת המחושבות באלגוריתם מורכב יותר מאפשרות גם תיקון של טעויות מסוימות.
[עריכה] דוגמת קוד לאימות ספרת ביקורת
דוגמה לפונקציה (ב-JavaScript) הבודקת האם מספר שהתקבל הוא מספר זהות ישראלי תקין.
function IDValidator(id) { var sID = String(id); if ((sID.length != 9) || (isNaN(sID))) return false; var counter = 0, incNum; for (var i = 0; i < 9; i++) { incNum = Number(sID.charAt(i)); incNum *= (i % 2) + 1; if (incNum > 9) incNum -= 9; counter += incNum; } return (counter % 10 == 0); }
def verify(id): h, t = [int(x) for x in id[:-1]], int(id[-1]) return t == 10 - sum(map(lambda x: x*2 if x<4 else x*2-9, h[::-2]) + h[-2::-2]) % 10
[עריכה] פונקציה המחשבת את ספרת הביקרות (בשפת PHP)
<?php
function CheckDigit ($num)
{
$sum=0;
for ($i = 1; $i <= 8; $i++){
$digit = (int)($num%10);
if ($i%2!=0){$digit*=2;}
$sum += (int)$digit%10+(int)($digit/10);
$num=(int)$num/10;
}
$checkdigit = (1+(int)($sum/10))*10-$sum;
$checkdigit = ($checkdigit%10);
return $checkdigit;
}
?>
:[עריכה] פונקציה המחשבת את ספרת הביקרות (בשפת #Java/C)
public static int checkDigit(int num){
int digit, sum=0;
for (int i = 1; i <= 8; i++)
{
digit = num % 10;
if (i % 2 != 0) digit *= 2;
sum += digit % 10 + digit / 10;
num = num / 10;
}
int checkdigit = (1 + sum / 10) * 10 - sum;
checkdigit = checkdigit % 10;
return checkdigit;
}
:[עריכה] דוגמת קוד נוספת לאימות ספרת ביקורת
דוגמה לחישוב ואימות ספרת ביקורת בממפס
MZ(ID) ; CHECK ID NUMBER IN ISRAEL
N F,I,K,S
S ERR=""
I ID'?9E S ERR="9 DIGITS ONLY" Q
S S=0,K=2
F I=1:1:8 D
.S K=$S(K=2:1,1:2)
.S F=K*$E(ID,I)
.I F>9 S F=($E(F,1)+$E(F,2))
.S S=S+F
S K=$E(S,$L(S))
S S=10-K
I $E(ID,9)'=S S ERR="WRONG DIGIT "_$E(ID,9)_" SHOULD BE: "_S
Q
:[עריכה] סיבית ביקורת במחשבים
במחשבים ישנים היו בעיות של חוסר אמינות של הזיכרון, דבר שהביא את חברת IBM לצרף לכל בית במחשביה סיבית ביקורת (כך שבית מורכב למעשה מ־9 סיביות = 8 סיביות נתונים + סיבית ביקורת). סיבית הביקורת מאפשרת לזהות טעות בסיבית אחת בודדת, אך לא לתקנה. במחשבים שבהם נושא אמינות הזיכרון הוא קריטי (למשל שרתי נתונים) משתמשים בטכניקות כגון קודים לתיקון שגיאות (Error-Correcting Codes - ECC), המאפשרות לזהות שגיאות מורכבות יותר ואף לתקן שגיאות מסוימות.
[עריכה] קישורים חיצוניים
- בלדד השוחי, איך נקבעת ספרת ביקורת בת"ז ובכרטיס אשראי?, באתר נענע 10
- ארז בן-ארי, איך עובד מיספור תעודת זהות?, באתר מעריב nrg