EAN-13 條碼的數學:檢查碼、編碼結構與日本 JAN 制度
BBUSINESS
商業發布: 9 分鐘閱讀

EAN-13 條碼的數學:檢查碼、編碼結構與日本 JAN 制度

收銀處讀取的貨品條碼,並非單靠線條粗幼來表示數字。日本標準型 JAN 符號採用的 EAN-13,包含檢查碼和支援雙向解碼的結構。GTIN(Global Trade Item Number,全球貿易貨品編碼)是識別貨品的號碼;條碼符號則是供機器讀取號碼的圖形。JAN 即 Japanese Article Number,是日本對貨品識別碼的稱呼。即使檢查碼正確,也不代表號碼已獲正式分配,更不能證明貨品真偽。本文從數學與符號結構入手,並介紹日本的 JAN 編號制度。

日文原文發布: 2026-05-05

條碼的起點:從專利到零售收銀掃描

Norman Joseph Woodland 與 Bernard Silver 在 1952 年取得美國專利《Classifying Apparatus and Method》,當中展示了平行線及同心圓的編碼例子。這些構想是條碼的早期形式,並不是後來的 UPC 標準。

1973 年,美國食品零售業採納 Universal Product Code(UPC)為標準。IBM 的 George Laurer 設計的 UPC-A,以線條表示 12 位數字。1974 年 6 月 26 日,美國俄亥俄州 Troy 的 Marsh 超市掃描了一包 Wrigley's Juicy Fruit 香口膠,成為著名的首次零售收銀 UPC 貨品條碼掃描。這項紀錄並不包括此前以試驗裝置進行的條碼讀取。

EAN 保留了與 UPC 的兼容性,並擴展國際貨品編號體系。日本 JAN 碼分為 13 位數的標準型及 8 位數的縮短型,分別以 EAN-13 和 EAN-8 符號表示。以下主要討論 GS1 體系中的 13 位數形式。

13 位數字的組成與解讀限制

一般透過 GS1 公司前綴(GS1 Company Prefix)建立的 GTIN-13,由公司前綴、貨品參考編號及檢查碼組成。公司前綴的長度可以不同,因此不能將所有號碼都在同一位置切開,以區分公司與貨品部分。

如表格未能完整顯示,可左右捲動。

由左至右的位置位數內容計算例子
第 1 至 12 位12GS1 公司前綴+貨品參考編號490123456789
第 13 位1檢查碼4

例子中的號碼只供計算示範,並不授予使用權,也不表示該號碼尚未被使用。ISBN 等特別編號體系,以及限制流通範圍的號碼,不能一概按上述一般公司前綴方式拆分。

GS1 前綴 450 至 459 和 490 至 499 分配予 GS1 Japan,但不代表貨品的生產地或原產地。前綴反映所屬的 GS1 編號組織,貨品仍可在其他地方生產。

GS1 Japan 提供 7、9 或 10 位數的公司前綴,與貨品參考編號合共組成首 12 位數,再加上 1 位檢查碼成為 GTIN-13。這裏說明的是日本制度,並非香港或其他地區的申請程序。

檢查碼的計算:1 與 3 交替加權

將首 12 位數由左至右排列:第 1、3、5 等奇數位置乘以 1,第 2、4、6 等偶數位置乘以 3。把各乘積相加,求出總和除以 10 的餘數,再計算 (10 − 餘數)mod 10。mod 表示取餘數。

以 490123456789 為例:

權重 1:4 + 0 + 2 + 4 + 6 + 8 = 24
權重 3:9 + 1 + 3 + 5 + 7 + 9 = 34;34 × 3 = 102
加權總和:24 + 102 = 126
餘數:126 mod 10 = 6
檢查碼:(10 − 6)mod 10 = 4

這個方法能偵測不少相鄰數字對調的錯誤。例如將 48 寫成 84,加權總和的變化不是 10 的倍數,檢查結果便會改變。不過,相鄰而相差 5 的數字對調,無法被偵測:0↔5、1↔6、2↔7、3↔8、4↔9。例如 4901234567894 和 9401234567894 都能通過檢查。

若原本是一組有效、固定為 13 位的號碼,只將其中一位換成另一個十進制數字,無論改動的是資料位還是檢查碼,都能被偵測。這屬於錯誤偵測,而非錯誤修正;它不能發現所有多位數字改動,也不能辨別貨品真偽。

以下 JavaScript 學習例子接收一個恰好包含 12 個 ASCII 數字的字串,並傳回檢查碼。號碼應以字串保存,避免遺失開頭的零。

function ean13CheckDigit(payload) {
  if (typeof payload !== "string" || !/^[0-9]{12}$/.test(payload)) {
    throw new TypeError("請輸入剛好 12 個 ASCII 數字");
  }
  const sum = [...payload].reduce(
    (total, digit, index) => total + Number(digit) * (index % 2 === 0 ? 1 : 3),
    0
  );
  return String((10 - sum % 10) % 10);
}
console.log(ean13CheckDigit("490123456789")); // "4"

學習用的驗算、正式分配貨品編號,以及印刷條碼檢驗,是三回事。NanToo 的日文版條碼產生工具不會核實號碼的分配狀態或貨品真偽;其 ITF-14 輸出是沒有承載條(bearer bars)的簡化符號,並不保證符合商業印刷規格。

條碼結構:模組、空白區及奇偶編碼

模組(module)是條碼橫向尺寸的最小單位。EAN-13 將 12 位數字直接編成各佔 7 個模組的字元;餘下的首位數字,則透過編碼組合表達。以下以 1 代表深色模組、0 代表淺色模組。

如表格未能完整顯示,可左右捲動。

部分闊度(模組數)作用
左側空白區(Quiet Zone)至少 11符號前須保留的空白
左側護欄圖樣(guard pattern)3:101標示符號邊界
左側 6 個字元426 × 7 個模組
中央護欄圖樣5:01010分隔左右兩部分
右側 6 個字元426 × 7 個模組
右側護欄圖樣3:101標示符號邊界
右側空白區(Quiet Zone)至少 7符號後須保留的空白

表格依據:GS1 General Specifications Release 26.0,第 5.2.3.4–5 節及第 5.2.6.3 節。不計空白區共 95 個模組,計入最小空白區則為 113 個模組。若每個模組的實際闊度為 X,左側至少須留 11X,右側至少須留 7X。這只是橫向結構,不能代替印刷時對 X 尺寸、條高、對比及品質的檢驗。

L、G、R 三組編碼,分別對應 GS1 的 A、B、C 集合。這裏的奇偶性(parity)是指一個字元內深色模組數量的奇偶,並非所代表數字本身是單數還是雙數。

  • L/A 集合:深色模組數為奇數,用於左半邊,從淺色模組開始。
  • G/B 集合:深色模組數為偶數,同樣用於左半邊,從淺色模組開始。
  • R/C 集合:用於右半邊,是 L 編碼的深淺色反轉。

例如數字 0 的 L 編碼是 0001101,G 是 0100111,R 是 1110010。將 L 的深淺色對調便得到 R;再將 R 的排列左右倒轉,便得到 G。

首位數字不會另佔一個 7 模組字元,而是決定左側 6 個字元的 L/G 組合。首位為 4 時採用 LGLLGG,首位為 0 時採用 LLLLLL。開頭的 0 預留作 GTIN-12 的表示方式,以維持 UPC 兼容性。

為何從左右兩個方向都能解碼?

EAN/UPC 的符號結構支援雙向解碼。不過,掃描仍須橫越條碼線條,並具備足夠空白區、合適的印刷品質和相應讀取設備。這並不代表任何掃描器都能以任意角度讀取受損條碼。

  • 對稱圖樣:左右護欄都是 101,中央護欄為 01010,反向讀取時排列不變。
  • 編碼集合與排列:反向讀取 R 字元會得到 G 的圖樣。由於左半邊可以同時使用 L 與 G,不能只靠單一字元的奇偶性判斷方向;還須結合護欄位置、允許的編碼組合、位數及檢查碼。
  • 恢復數字次序:解碼器比對符號結構,按掃描方向還原正確的數字排列。

以上解釋的是符號為何支援反向解碼,不表示所有掃描器都必須採用同一套實作步驟。

EAN-8、UPC-A 及其他條碼格式

不同條碼格式各有用途和限制:

如表格未能完整顯示,可左右捲動。

格式資料長度常見用途與限制
EAN-88 位數用於標籤空間有限的小型貨品。GTIN-8 有獨立分配方式,並非截短 GTIN-13。日本設有逐一分配的號碼(one-off key),以及透過縮短型公司前綴設定號碼的方式。
UPC-A12 位數常見於北美。GTIN-12 前面加 0,可得到其 13 位數表示;不能將任意 GTIN-13 縮短成 UPC-A。
Code 128可變長度支援英文字母、數字及符號,用於業務及物流標籤。
Code 39可變長度支援大寫英文字母、數字及部分符號,用於業務系統。
ITF-1414 位數在外箱等集合包裝上表示 GTIN-14,適合瓦楞紙箱,但仍須符合承載條及印刷品質等要求。
Codabar/NW-7可變長度使用數字及部分符號,以 A 至 D 作為起始與結束字元,見於圖書館等既有系統。

EAN-13 只承載固定 13 位數的識別碼。Code 128 雖然長度可變,但資料越多,條碼便越闊,仍受標籤空間、最小線寬及讀取設備限制;並沒有適用於所有用途的「最多數十個字元」上限。QR Code、Data Matrix 等二維條碼則提供承載更多資料的其他方式。如想了解符號受損時的資料恢復原理,可參閱QR Code 錯誤修正等級解說。

重點整理

  • 一般透過公司前綴建立的 GTIN-13,由 GS1 公司前綴、貨品參考編號及檢查碼組成。號碼與 EAN-13 條碼符號是兩回事。
  • 以 1 和 3 交替加權,可偵測有效固定長度號碼的每一種單一數字替換;相鄰且相差 5 的數字對調則無法被偵測。
  • 12 個各佔 7 模組的字元,加上護欄共 95 個模組,連同最小空白區為 113 個模組。
  • 首位數字以左側 L/G 組合表示,不另佔一個 7 模組字元。
  • 符號結構支援雙向解碼,實際讀取仍取決於印刷及掃描條件。
  • UPC 在 1973 年獲採納,1974 年出現著名的首次零售收銀掃描。現時國際貨品識別體系由 GS1 維護。

參考資料及來源

編輯說明

本文使用 AI 協助編輯,並在發布前由編輯核對。內容仍可能包含事實、理解或時效上的錯誤;作出重要決定前,請查閱所列的一手資料或官方文件。

相關文章