機讀區(MRZ)的規則
機讀區(MRZ)是位於旅行證件上,供自動系統讀取使用之專用區域。其資訊須符合國際標準 OCR-B 字體格式,並包含持有人基本資料與校驗碼。機讀旅行證件(MRTD)必須含有機讀區作為必要組成部分。
位置與背景
機讀區應設置於旅行證件資料頁的底部,並佔據完整寬度。其背景應為白色或淺色單一色彩,且不得含有圖樣、水印或其他會干擾辨識的元素。
字體與印刷標準
機讀區的所有文字必須採用 OCR-B 字體。字體高度應為 2.54 毫米(±0.15 毫米)。字體顏色應為純黑,且印刷解析度不得低於 300 dpi。
編碼格式與內容
機讀區應為兩列格式,每列長度為 44 字元。其內容格式如下:
-
第一列:
P<國家代碼<<姓氏<<名
-
第二列:
護照號碼<校驗碼<國籍<出生年月日<性別<有效期<校驗碼<<個人識別碼<校驗碼
欄位不足處應以「<」符號填補。所有個人資料必須與資料頁所列內容完全一致,禁止簡寫或縮略。
校驗碼(Check Digit)
校驗碼依據 模 10 演算法(Modulus 10 Algorithm,或稱盧恩算法) 計算。它是附於機讀區特定欄位尾端的數字,用於驗證資訊準確性,避免讀寫錯誤。
需要附加校驗碼的欄位包括:
-
護照號碼
-
出生年月日(格式:YYMMDD)
-
證件有效期限(格式:YYMMDD)
-
個人識別碼(若適用)
-
最終檢查碼(綜合前述欄位及相關符號共同運算)
校驗碼計算時,字元會轉換為數值(數字0-9為0-9,字母A-Z為10-35,符號`<`為0)。每個數值會乘上對應權重(依序為7、3、1循環),所有乘積總和後取其除以10的餘數即為校驗碼。
以下為一個JavaScript範例程式碼,用於計算校驗碼:
function calculateCheckDigit(data) {
let sum = 0;
for (let i = 0; i < data.length; i++) {
const char = data[i];
const value = CHAR_TO_VALUE[char];
if (value === undefined) {
throw new Error(`不支援的字元 "${char}",無法計算校驗碼。`);
}
sum += value * CONFIG.WEIGHTS[i % CONFIG.WEIGHTS.length];
}
return sum % 10;
}
其中,CHAR_TO_VALUE
為字元對應數值的映射表,CONFIG.WEIGHTS
為權重數組([7, 3, 1]
)。
語言與轉寫
非拉丁字母的姓名(如中文、阿拉伯文、俄文等)應依照國際標準進行轉寫,並建議使用 MSICAO 指定的轉寫表。中文姓名應依據漢語拼音系統轉寫。
轉寫後,所有字母應全部轉為大寫,且不使用聲調符號、空格或標點符號。姓氏與名字之間應使用「<<」分隔,同一部分的多字詞以「<」相隔。
機讀區只允許使用 A–Z(大寫)、0–9 及「<」三種類型的字元,不能使用空格、連字符、底線、中文或其他特殊符號。
技術測試與驗證
簽發機關在發行前,應使用 MSICAO 認可的解析工具(如此工具)進行 MRZ 讀取測試。測試應達到 99% 以上的機讀成功率,並排除印刷或轉寫錯誤後方可正式核發。