תפריט

קודי מדינה וחלוקה של ISO: מדריך מעשי

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

פורסם

  • נתוני בדיקה
  • כתובת
  • תקנים

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

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

שלוש הצורות של קוד מדינה

התקן הבין לאומי לקודי מדינה מגדיר שלוש ייצוגים מקבילים לאותה קבוצת מדינות וטריטוריות.

צורה מבנה שימוש אופייני
Alpha-2 שתי אותיות החלפת נתונים, רשימות נפתחות, רוב עמודות היישום
Alpha-3 שלוש אותיות דיווח, פיננסים, מערכות שרוצות קודים קריאים יותר
Numeric שלוש ספרות הקשרים ניטרליים מבחינת שפה ומערכות ותיקות

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

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

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

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

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

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

האם קודי חלוקה זהים לאלה שמשתמשות בהן רשויות מקומיות?

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

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

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

האם כדאי להמציא קודים משל עצמנו?

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

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

מניין מגיעים קודים מיושנים או לא ידועים?

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

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

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

למפתחים: אחסון, רשימות ונפילה לאחור

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

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

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

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

צעדים הבאים

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

המשך קריאה

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