GTIN、序列号与校验位:格式规则
每一个电池护照二维码背后都有一个遵循严格规则的标识符:固定的字符长度、明确定义的字符集,以及一位能让输入错误立刻暴露的校验位。本指南讲解这些规则,逐步演示校验位的计算过程,并通过一个实例展示无效序列号究竟错在哪里。
- 两个号码,两套规则。GTIN 标识型号,由 8、12、13 或 14 位数字组成;序列号标识单块电池,长度为 1 至 20 个字符。
- GTIN 的最后一位是算出来的,不是数出来的。模 10 校验位能立即暴露输错或颠倒的数字——它也是导入被拒绝的最常见原因。
- 字符集比想象中更窄。CSET 82 既不含空格,也不含变音字母。“BPW 2027#Ü01”不是有效序列号,“BPW-2027-UE01”才是。
- Batteriepasswerk 在保存时校验二者——在数据库层,而不仅仅在表单里。因此录入界面、CSV 导入和 API 适用同一套规则。
格式为何是一个法律问题
格式规则听起来像是 IT 部门的细枝末节。但对电池标识符而言并非如此:它是多年之后仍能找到这本护照的唯一锚点。
法规 (EU) 2023/1542 第 77(3) 条要求二维码及唯一标识符符合 ISO/IEC 15459 系列标准。该系列并未规定具体使用哪种号码——它要求标识符来自经认可的发码机构,并且全球唯一。GS1 正是这样的机构。因此,序列化 GTIN——即型号编号与单块电池序列号的组合——只要满足以下三个条件,即可满足该要求:
长度为四种允许长度之一,仅含数字,且最后一位为正确的校验位。
最多 20 个字符,且全部来自 GS1 字符集 CSET 82——否则该值无法作为 AI 21 传输。
GTIN 与序列号的组合在全球范围内只能出现一次——否则同一次扫描会指向两块电池。
“能扫描”与“合规”并不是一回事
任意 URL 生成的二维码都能扫描并打开一个页面——但这并不够。法规要求的是来自公认编码体系的标识符,回收企业的系统或市场监管机构无需了解各厂商自定的约定,也能以机器方式解析。自制二维码与合规标识符的分界线正在于此。
标识符如何存在于二维码中
GS1 Digital Link 把两个号码装进一个普通的 URL。斜杠之间的短数字是应用标识符(Application Identifier,简称 AI):它们告诉读取系统后面的值代表什么。
| 组成部分 | 含义 | 格式规则 |
|---|---|---|
| AI 01 | GTIN——标识型号(贸易项目) | 在 Digital Link 中恒为 14 位——GTIN-8/12/13 需补前导零 |
| AI 21 | 序列号——标识单块电池 | 1-20 个 CSET 82 字符,区分大小写 |
| AI 01 + AI 21 | 序列化 GTIN——符合 ISO/IEC 15459 的标识符 | 组合全球唯一 |
二维码本身的设计要求——对比度、尺寸、耐久性——见指南 2027 年起电池上的二维码。
四种允许的 GTIN 长度——没有第五种
GS1 只发放四种长度的号码。企业使用哪一种,取决于产品和销售市场——而不是内部编号习惯。
| 格式 | 长度 | 典型用途 | 说明 |
|---|---|---|---|
| GTIN-8 | 8 位数字 | 标签上放不下更长编码的极小商品 | 在电池领域较为少见 |
| GTIN-12 | 12 位数字 | 北美 UPC 格式 | 出口美国和加拿大时相关 |
| GTIN-13 | 13 位数字 | 欧洲常用的 EAN 格式——默认情形 | 德国前缀通常为 400-440 |
| GTIN-14 | 14 位数字 | 外包装与贸易单元,带前置指示位 | Digital Link 中的强制写法(GS1 DL 1.4.0 起) |
在 Digital Link 中 GTIN 恒为 14 位
为进入 Digital Link,四种格式都会补足到 14 位:GTIN-13 的 4006381333931 变为 04006381333931。校验位不会改变,因为加权从右侧开始,前导零对总和没有贡献。自 GS1 Digital Link URI 语法 1.4.0 版起(现行为 2025 年 3 月的 1.6.0),这已不再是建议而是要求:新实现必须以 14 位书写 GTIN,只有既有解析器才应继续接受更短的旧格式。而在表格中,只有把该列设为文本格式,前导零才能保留。
最后一位参与运算
校验位不是流水号,而是对前面所有位进行运算的结果。它占用一位,换来的是拦截两类最常见的录入错误:输错的数字和颠倒的相邻数字。
- 加权和
- 89
- 下一个十位数
- 90
- 应有校验位
- 90 − 89 = 1
- 实际填写
- 1
有效的 GTIN——予以保存
- 加权和
- 89
- 下一个十位数
- 90
- 应有校验位
- 90 − 89 = 1
- 实际填写
- 2
校验位不符——保存被拒绝
该方法对四种 GTIN 长度完全相同,称为模 10 加 3/1 加权。它能发现任何单个输错的数字值——把 1 输成 7 必然会改变加权和。对于相邻数字颠倒,它几乎总能发现;唯一的盲区是数值恰好相差 5 的一对(例如把 61 写成 16)。若要排除这种情况,还需要与自有物料主数据做第二次比对。
校验位要计算,不能递推
新建型号时的典型错误:拿上一个型号的 GTIN 加一。这样基础部分是对的,但校验位只有十分之一的概率碰巧正确。新的 GTIN 应来自企业自有的 GS1 号段,校验位由系统计算。
CSET 82:仅 82 个字符
与 GTIN 不同,序列号可以包含字母——但不是任意字母。GS1 字符集 CSET 82 恰好包含 82 个字符,此外的一切都无法作为 AI 21 的值传输。
| 类别 | 字符 | 数量 |
|---|---|---|
| 大写字母 | A-Z | 26 |
| 小写字母 | a-z | 26 |
| 数字 | 0-9 | 10 |
| 特殊字符 | ! " % & ' ( ) * + , - . / : ; < = > ? _ | 20 |
| 不包含 | 空格、# $ @ [ \ ] ^ ` { | } ~、变音字母、重音字母,以及所有非 ASCII 字符 | - |
有两个细节经常被忽略。其一,大小写具有区分意义:BPW-0001a 与 BPW-0001A 是两个不同的序列号。在仓库中把它们当作同一个,就会造成形式上并不存在的混淆。其二,部分允许的字符——/、?、&、%、+——同时也是 URL 中的控制字符。它们作为序列号是合法的,但在 Digital Link 中必须转义,否则浏览器会在错误的位置拆分地址。只要由软件自动处理就不成问题;手写链接时则是实实在在的问题。
有效与无效并排对照
下面两个序列号出自同一套内部编号规则,看上去同样可用。但只有左边的能编码为 GS1 标识符——右边的败在三个单独的字符上。
- 长度14 /20 个字符
- 字符集 GS1 CSET 82全部字符均允许
- 公司内唯一可用
- 长度12 /20 个字符
- 字符集 GS1 CSET 823 个不允许的字符
- 公司内唯一可用
- 空格。CSET 82 不含空格字符——在路径段中它也只能以转义形式(%20)传输。
- 字符 # 不属于 CSET 82。在 URL 中它还会开启片段部分,扫描时标识符会被截断。
- 变音字母以及所有其他非 ASCII 字符均不允许——CSET 82 仅包含 A-Z、a-z、0-9 和 20 个特殊字符。
正确写法: 把 BPW 2027#Ü01 改成 BPW-2027-UE01——含义相同,字符集可编码。
真实导入中出现的六个错误
| 错误 | 会发生什么 | 如何解决 |
|---|---|---|
| 前导零丢失 | 表格软件把 GTIN 当作数字读取。04006381333931 变成 4006381333931——更糟的是变成 4.00638E+12。 | 导入前把该列设为文本格式,绝不要把 GTIN 存为数值。 |
| 序列号中含变音字母 | Ü、ä、é 或 ß 不属于 CSET 82,无法编码为 AI 21 的值。 | 改用 A-Z、a-z、0-9 及 20 个允许的特殊字符(Ü → UE)。 |
| 用空格作分隔 | “BPW 2027 0001”看起来整齐,却不是有效的 AI 21 值——CSET 82 不含空格字符。 | 改用连字符或句点,两者都属于该字符集。 |
| 内部号码过长 | ERP 序列号常有 24 位或 32 位。从第 21 个字符起,标识符不再符合 AI 21。 | 定义更短的派生规则并验证其唯一性——不要盲目截断。 |
| 校验位靠猜 | 手工递推 GTIN,迟早会得到最后一位不再匹配的号码。 | 始终由系统计算校验位,绝不沿用递推。 |
| GTIN 重复使用 | 两个型号共用一个 GTIN 会使解析产生歧义——扫描时无法判断该显示哪本护照。 | 每个 GTIN 只对应一个型号。变体型号需要各自的 GTIN。 |
这些规则在我们的产品中如何落地
只在录入表单中检查的格式规则,对 CSV 导入和 API 调用就不再生效。因此我们把校验放在更底层——数据库层,位于所有写入路径之后。
没有 GTIN 时会有备用链接——但那不是 GS1 标识符
没有 GTIN 的型号会获得一个指向内部护照编号的备用地址。二维码仍可扫描,护照也可公开访问——但这不足以满足第 77(3) 条,因为此时标识符并非来自经认可的编码体系。要合规交付护照,型号上必须有 GS1 号码。生成二维码的页面会就此提示,避免这一缺口一路带到生产环节。
一个型号如何变成上千本序列化护照,见指南 创建电池护照。除此之外还有哪些必填数据字段,见 电池护照包含哪些数据。