MSICAO Doc 01 規範內容

這是Doc01文件的規範整理頁面,我們已經將該規範轉為白話文了。
歡迎各國參考本工具,並在微國國際民航組織(MSICAO)Discord群組中討論和交流。

機讀區(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% 以上的機讀成功率,並排除印刷或轉寫錯誤後方可正式核發。