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-8 | 8 | EAN-8 | 小包装(口香糖、化妆品) |
| GTIN-12 | 12 | UPC-A | 北美零售 |
| GTIN-13 | 13 | EAN-13 | 全球零售 |
| GTIN-14 | 14 | ITF-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 这类广为流传的示例码已被各平台列入黑名单。本工具会把它们全部标出来 —— 这就是「校验位算得过」和「可以放心上架」之间的差别。