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

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

商品條碼不只是用粗細不同的線條表示數字。日本標準型 JAN 碼所使用的 EAN-13,結合了檢查碼與可從兩個方向解碼的符號結構。GTIN(Global Trade Item Number,全球交易品項識別碼)是識別商品的號碼;條碼則是讓機器讀取這個號碼的圖形。JAN 是 Japanese Article Number,在本文中指日本的商品識別碼名稱。檢查碼正確,不代表號碼已獲正式編配,也不能證明商品真偽。以下分別說明計算方法、條碼結構與日本的編配制度。

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

從早期專利到第一次零售 UPC 掃描

Norman Joseph Woodland 與 Bernard Silver 於 1952 年取得的美國專利《Classifying Apparatus and Method》,描述了平行線與同心圓的編碼範例。這些設計是後來條碼的前身,並非之後的 UPC 標準。

1973 年,美國食品零售業採用 Universal Product Code(UPC)作為標準。IBM 的 George Laurer 設計了表示 12 位數號碼的 UPC-A。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 表示取餘數。

以前 12 位數 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 位的號碼出發,只把其中 1 位改成另一個十進位數字,包含檢查碼本身,這個方法都能偵測到。這是錯誤偵測,不是錯誤更正;它無法偵測所有多位數變動,也不能驗證商品真偽。

以下可執行的 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 位則透過編碼組合表示,稍後說明。以下以 1 表示深色模組、0 表示淺色模組。

表格若超出畫面寬度,可左右捲動。

區域寬度(模組數)用途
左側空白區(Quiet Zone)至少 11符號前方須保留的空白
左側護欄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 個模組。若 1 個模組的實際寬度是 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。R 是 L 的深淺色反轉,G 則是 R 的左右反轉。

最前面的第 1 位不會另外占用一個 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 個模組。
  • 最前面的第 1 位透過左側 L/G 組合表示,不另占一個 7 模組字元。
  • 條碼結構支援從兩個方向解碼,但實際讀取仍受印刷與掃描條件影響。
  • UPC 於 1973 年獲採用,1974 年出現著名的首次零售結帳掃描。如今由 GS1 維護國際商品識別體系。

參考資料與來源

編輯說明

本文使用 AI 協助編輯,並於發布前由編輯確認。內容仍可能包含事實、解讀或時效上的錯誤;進行重要判斷前,請查閱所列的一手資料或官方文件。

相關文章