תפריט

ספרות ביקורת EAN ו-UPC בברקודים

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

פורסם

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

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

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

מאין מגיעה הספרה האחרונה בברקוד?

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

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

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

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

EAN-13 ו-UPC-A: שני אורכים נפוצים ונקודות התחלה שונות למשקלים

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

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

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

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

הרעיון של שקלול מהצד הימני

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

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

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

מה אומר קידומת הברקוד ומה היא אינה אומרת

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

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

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

האם בדיקה שעברה מבטיחה שהברקוד ייסרק?

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

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

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

למפתחים: סריקה מרובה ואיתור שגיאות

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

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

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

צעדים הבאים

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

המשך קריאה

מדריכים בנושא כלי אימות למספרי כרטיסים ולמספרי זהות