GTIN / UPC / EAN 校验器

粘贴一个条码,或者整列表格数据。校验位、格式、GS1 号段,以及真实世界里的数据损坏 —— 依据 26 条有据可查的规则即时校验。

🔒 你的数据不会离开浏览器。

或把文件拖放到输入框 —— 文件在本地读取,不会上传。

本工具执行的全部检查(共 26 条规则)

临时写的校验器只查长度,顶多再算一下校验位。下面这份清单就是本工具的全部契约:每条规则都有固定编号、严重级别、通俗解释,以及(存在时的)官方出处。没有列在这里的,本工具就不检查。

输入清洗与表格损坏

INPUT-001 输入为空

去掉空白和格式字符之后什么都不剩。

修复: 请输入一个 GTIN:8、12、13 或 14 位数字。

来源: Yaktool data-hygiene rule — derived from real-world spreadsheet and copy-paste corruption patterns, not from a GS1 specification. Every case is covered by a regression test in our test suite.

INPUT-002 科学计数法损坏(Excel)

输入形如 “8.71E+12”。Excel 会把长数字转成科学计数法,并永久丢弃中间的数位——原始 GTIN 无法从这个值还原。

修复: 回到源文件。在 Excel 里先把该列设为「文本」格式(或在数值前加一个半角单引号),再重新导出。

来源: Yaktool data-hygiene rule — derived from real-world spreadsheet and copy-paste corruption patterns, not from a GS1 specification. Every case is covered by a regression test in our test suite.

INPUT-003 已移除格式字符

校验前去掉了空格、连字符、千分位分隔符,以及不可见字符(零宽空格、BOM、不换行空格)。从表格、PDF 或网页复制时很常见。

来源: Yaktool data-hygiene rule — derived from real-world spreadsheet and copy-paste corruption patterns, not from a GS1 specification. Every case is covered by a regression test in our test suite.

INPUT-004 已转换全角数字

全角数字(123,常见于中日韩输入法与文档)已转换为标准的半角数字。

来源: Yaktool data-hygiene rule — derived from real-world spreadsheet and copy-paste corruption patterns, not from a GS1 specification. Every case is covered by a regression test in our test suite.

INPUT-005 含非数字字符

清洗之后,输入里仍有不是数字的字符。GTIN 只由数字组成。

修复: 去掉字母和符号。如果数据里混进了内部 SKU,请单独取出条码所在的数字列。

来源: Yaktool data-hygiene rule — derived from real-world spreadsheet and copy-paste corruption patterns, not from a GS1 specification. Every case is covered by a regression test in our test suite.

INPUT-006 11 位——很可能被吃掉了前导零

以 0 开头的 UPC-A 被 Excel 当作数字处理时会丢掉前导零。11 位本身不是合法的 GTIN,但它极常见地是一个丢了首位 0 的 UPC-A。

修复: 补一个 0 后重新校验。要从根上避免,请在 Excel 里把条码列设为「文本」格式。

来源: Yaktool data-hygiene rule — derived from real-world spreadsheet and copy-paste corruption patterns, not from a GS1 specification. Every case is covered by a regression test in our test suite.

INPUT-007 长度不合法

GTIN 必须恰好是 8 位(GTIN-8 / EAN-8)、12 位(GTIN-12 / UPC-A)、13 位(GTIN-13 / EAN-13)或 14 位(GTIN-14 / 箱码)。

修复: 检查是否被截断或与其他值连在了一起。7 位的值可能是丢了前导零的 GTIN-8。

官方依据 ↗

INPUT-008 已移除末尾的 “.0”(表格软件的数值转换)

形如 “4006381333931.0” 的输入,说明这个值经过了某个把它当浮点数处理的工具(Excel、pandas)。“.0” 已被去掉、校验照常进行——但请检查该列其余的值有没有更严重的损坏(科学计数法、丢失的零)。

修复: 在源头把该列设为「文本」格式,从根上阻止数值转换。

来源: Yaktool data-hygiene rule — derived from real-world spreadsheet and copy-paste corruption patterns, not from a GS1 specification. Every case is covered by a regression test in our test suite.

校验位

CHECK-001 校验位不匹配

最后一位必须等于前面各位按 GS1 模 10 算法(自右起 3、1、3、1… 交替加权)算出的校验值。不匹配意味着录入错误、OCR 识别错误,或者这个码是编造的。

修复: 与实物包装上条码下方印的数字逐位核对。不要直接把校验位改成算出来的那个数,除非你确认其余各位都是对的。

官方依据 ↗

格式与等价关系

FORMAT-001 GTIN-12 ⇄ GTIN-13 等价

UPC-A(GTIN-12)前面补一个 0 之后,与它的 GTIN-13 形式是同一个商品代码,校验位不变。不同平台可能显示其中任意一种形式。

官方依据 ↗

FORMAT-002 13 位且以 00000 开头——很可能是被错存的 GTIN-8

GTIN-8 是独立的号段,不是补零得到的 GTIN-13。13 位且以 00000 开头,通常意味着一个 GTIN-8 被存进了 13 位的字段;把它当 EAN-13 解读会把前缀归属判错。

修复: 如果源头的条码是 8 位,请按 GTIN-8 校验(取后 8 位)。

官方依据 ↗

FORMAT-003 GTIN-14 的指示位

GTIN-14 的首位是指示位:1–8 表示包装层级(例如基本单元的整箱),9 表示变量计量贸易项目,0 表示该值等价于它所包含的 GTIN-13。

官方依据 ↗

FORMAT-004 GTIN-8 有自己的号段

GTIN-8(EAN-8)由 GS1 为小包装直接分配。GTIN-8 不是截短的、也不是补零的 EAN-13,它开头几位是 GS1-8 前缀,而不是厂商识别代码。

官方依据 ↗

GS1 号段

RANGE-001 GS1 前缀归属

(按 GTIN-13 形式)前三位标识分配这个号码的 GS1 成员组织。这不是原产地——在任何地方生产的商品,都可能带着任何一个 GS1 成员组织的前缀。

官方依据 ↗

RANGE-002 受限流通号段(店内码)

020–029、040–049 和 200–299 前缀保留给受限流通用途:店内码、变量计量商品、内部编号。它们是合法条码,但不能作为商品 GTIN 发布到公开平台(亚马逊、Google 购物等)。

修复: 公开销售此商品前,先从 GS1(或品牌方)获取一个真正的 GTIN。

官方依据 ↗

RANGE-003 优惠券号段

050–059、981–984 和 990–999 前缀标识的是优惠券,不是商品。商品数据源里出现优惠券码会被平台拒收。

官方依据 ↗

RANGE-004 ISBN(Bookland 978/979)

978 和 979 前缀是图书标识(ISBN-13 的 EAN 形式);其中 979-0 专用于印刷乐谱的 ISMN。作为条码是合法的,但图书类目通常要求把 ISBN 填在专门的 ISBN 字段里。

官方依据 ↗

RANGE-005 ISSN(977)

977 前缀标识连续出版物(期刊、杂志)——它是 ISSN 的 EAN 形式,不是普通的商品 GTIN。

官方依据 ↗

RANGE-006 前缀不在本工具的表内

这个前缀不在本工具的 GS1 前缀表里。GS1 会不断分配新前缀,所以仅凭这一点不能判定该码无效——但请核实号码的来源。

官方依据 ↗

合理性与占位码

PLAUS-001 全零

全零的值能算过校验位,但不是真实的 GTIN——它是「没有条码」最经典的占位写法。

修复: 取得该商品真正的 GTIN;平台会拒收全零的码。

来源: Yaktool plausibility rule — these values pass the GS1 checksum but are placeholders that marketplaces reject in practice. Sourced from documentation samples and observed feed data, not from a GS1 specification.

PLAUS-002 所有数位相同

每一位都一样(例如 4444444444444)。即便校验位碰巧算得过,这类值也是占位码,不是被分配出去的 GTIN。

修复: 取得该商品真正的 GTIN。

来源: Yaktool plausibility rule — these values pass the GS1 checksum but are placeholders that marketplaces reject in practice. Sourced from documentation samples and observed feed data, not from a GS1 specification.

PLAUS-003 已知的占位码 / 示例码

这个值正是文档和教程里广为流传的演示码(例如 1234567890128)。它能算过校验位,却不指向任何真实商品,平台会把这类码列入黑名单。

修复: 换成实际分配给你的商品的那个 GTIN。

来源: Yaktool plausibility rule — these values pass the GS1 checksum but are placeholders that marketplaces reject in practice. Sourced from documentation samples and observed feed data, not from a GS1 specification.

批量模式

BATCH-001 批次内重复

同一个 GTIN 在这批数据里出现了不止一次(比较前统一补零到 14 位,所以一个 UPC 和它的 GTIN-13 形式算作同一个码)。不同商品用同一个 GTIN 会让平台上架失败。

修复: 每一个不同的商品 / 包装层级都需要各自的 GTIN。

来源: Yaktool data-hygiene rule — derived from real-world spreadsheet and copy-paste corruption patterns, not from a GS1 specification. Every case is covered by a regression test in our test suite.

关于这些规则。 每一条都有编号、严重级别和通俗解释。每个来源链接都已登记在案,并对线上页面实际复验过,而不是凭印象写上去的. 规则如何编写、测试与保持更新 →

什么是 GTIN?

GTIN(全球贸易项目代码)就是商品条码下面那串数字 —— 亚马逊、Google 购物这类平台用它来识别一件商品。标准由 GS1 制定并分配,共有四种长度:

格式位数别称典型用途
GTIN-88EAN-8小包装(口香糖、化妆品)
GTIN-1212UPC-A北美零售
GTIN-1313EAN-13全球零售
GTIN-1414ITF-14、箱码物流中的纸箱与整箱

UPC 和 EAN 有什么区别?

UPC-A 其实就是首位为零的 GTIN-13,只是把那个零省略不写。给 UPC 前面补一个 0,得到的就是同一件商品的 EAN-13 形式 —— 连校验位都不变。GTIN-8 是例外:它有自己独立的号段,不是缩短版的 EAN-13。

校验位是怎么算的

每个 GTIN 的最后一位都是模 10 校验位:自右起把其余各位交替乘以 3 和 1,求和,校验位取那个能把总和补足为 10 的倍数的数。错一位数字它就对不上 —— 这正是它存在的目的。

Excel 为什么会损坏条码

Excel 会把粘贴进来的条码当成数字。位数长的值会被显示成、并且保存成科学计数法(8.71E+12),中间的数位就此永久损毁。以 0 开头的 UPC 则会悄悄丢掉那个零,变成 11 位。本工具两种都能检出;而一劳永逸的做法是:粘贴之前先把条码列设为文本格式。

哪些码不能公开上架?

有些号码校验位算得过,却仍然不能用在商品数据源里:020–029、040–049 和 200–299 前缀是店内码,050–059 和 990–999 标识优惠券,而 1234567890128 这类广为流传的示例码已被各平台列入黑名单。本工具会把它们全部标出来 —— 这就是「校验位算得过」和「可以放心上架」之间的差别。