● 知识中心 · 16 标识符

GTIN、序列号与校验位:格式规则

每一个电池护照二维码背后都有一个遵循严格规则的标识符:固定的字符长度、明确定义的字符集,以及一位能让输入错误立刻暴露的校验位。本指南讲解这些规则,逐步演示校验位的计算过程,并通过一个实例展示无效序列号究竟错在哪里。

作者:Grigor Muradyan · 阅读约 10 分钟 · 更新于 · 非法律咨询
8·12·13·14
GTIN 长度
其余一律不是 GTIN
20
字符上限
AI 21 序列号
82
允许的字符
GS1 CSET 82,不含空格
模 10
校验位
自右向左 3/1 加权
要点速览
  • 两个号码,两套规则。GTIN 标识型号,由 8、12、13 或 14 位数字组成;序列号标识单块电池,长度为 1 至 20 个字符。
  • GTIN 的最后一位是算出来的,不是数出来的。模 10 校验位能立即暴露输错或颠倒的数字——它也是导入被拒绝的最常见原因。
  • 字符集比想象中更窄。CSET 82 既不含空格,也不含变音字母。“BPW 2027#Ü01”不是有效序列号,“BPW-2027-UE01”才是。
  • Batteriepasswerk 在保存时校验二者——在数据库层,而不仅仅在表单里。因此录入界面、CSV 导入和 API 适用同一套规则。
01 · 法律框架

格式为何是一个法律问题

格式规则听起来像是 IT 部门的细枝末节。但对电池标识符而言并非如此:它是多年之后仍能找到这本护照的唯一锚点。

法规 (EU) 2023/1542 第 77(3) 条要求二维码及唯一标识符符合 ISO/IEC 15459 系列标准。该系列并未规定具体使用哪种号码——它要求标识符来自经认可的发码机构,并且全球唯一。GS1 正是这样的机构。因此,序列化 GTIN——即型号编号与单块电池序列号的组合——只要满足以下三个条件,即可满足该要求:

1
GTIN 有效

长度为四种允许长度之一,仅含数字,且最后一位为正确的校验位。

2
序列号可编码

最多 20 个字符,且全部来自 GS1 字符集 CSET 82——否则该值无法作为 AI 21 传输。

3
组合唯一

GTIN 与序列号的组合在全球范围内只能出现一次——否则同一次扫描会指向两块电池。

“能扫描”与“合规”并不是一回事

任意 URL 生成的二维码都能扫描并打开一个页面——但这并不够。法规要求的是来自公认编码体系的标识符,回收企业的系统或市场监管机构无需了解各厂商自定的约定,也能以机器方式解析。自制二维码与合规标识符的分界线正在于此。

02 · 结构

标识符如何存在于二维码中

GS1 Digital Link 把两个号码装进一个普通的 URL。斜杠之间的短数字是应用标识符(Application Identifier,简称 AI):它们告诉读取系统后面的值代表什么。

Batteriepasswerk 为每个单元签发的 GS1 Digital Link 结构。此处 GTIN 始终以 14 位表示——GTIN-13 的 4006381333931 需补一个前导零。
组成部分含义格式规则
AI 01GTIN——标识型号(贸易项目)在 Digital Link 中恒为 14 位——GTIN-8/12/13 需补前导零
AI 21序列号——标识单块电池1-20 个 CSET 82 字符,区分大小写
AI 01 + AI 21序列化 GTIN——符合 ISO/IEC 15459 的标识符组合全球唯一

二维码本身的设计要求——对比度、尺寸、耐久性——见指南 2027 年起电池上的二维码

03 · 字符长度

四种允许的 GTIN 长度——没有第五种

GS1 只发放四种长度的号码。企业使用哪一种,取决于产品和销售市场——而不是内部编号习惯。

格式长度典型用途说明
GTIN-88 位数字标签上放不下更长编码的极小商品在电池领域较为少见
GTIN-1212 位数字北美 UPC 格式出口美国和加拿大时相关
GTIN-1313 位数字欧洲常用的 EAN 格式——默认情形德国前缀通常为 400-440
GTIN-1414 位数字外包装与贸易单元,带前置指示位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,只有既有解析器才应继续接受更短的旧格式。而在表格中,只有把该列设为文本格式,前导零才能保留。

04 · 校验位

最后一位参与运算

校验位不是流水号,而是对前面所有位进行运算的结果。它占用一位,换来的是拦截两类最常见的录入错误:输错的数字和颠倒的相邻数字。

GS1 校验位(模 10)
数字4006381333931权重×1×3×1×3×1×3×1×3×1×3×1×3校验位
加权和
89
下一个十位数
90
应有校验位
9089 = 1
实际填写
1

有效的 GTIN——予以保存

数字4006381333932权重×1×3×1×3×1×3×1×3×1×3×1×3校验位
加权和
89
下一个十位数
90
应有校验位
9089 = 1
实际填写
2

校验位不符——保存被拒绝

从校验位左侧开始,各位依次以 3 和 1 加权。将加权和补足到下一个十位数,差值即为校验位。

该方法对四种 GTIN 长度完全相同,称为模 10 加 3/1 加权。它能发现任何单个输错的数字值——把 1 输成 7 必然会改变加权和。对于相邻数字颠倒,它几乎总能发现;唯一的盲区是数值恰好相差 5 的一对(例如把 61 写成 16)。若要排除这种情况,还需要与自有物料主数据做第二次比对。

校验位要计算,不能递推

新建型号时的典型错误:拿上一个型号的 GTIN 加一。这样基础部分是对的,但校验位只有十分之一的概率碰巧正确。新的 GTIN 应来自企业自有的 GS1 号段,校验位由系统计算。

05 · 字符集

CSET 82:仅 82 个字符

与 GTIN 不同,序列号可以包含字母——但不是任意字母。GS1 字符集 CSET 82 恰好包含 82 个字符,此外的一切都无法作为 AI 21 的值传输。

类别字符数量
大写字母A-Z26
小写字母a-z26
数字0-910
特殊字符! " % & ' ( ) * + , - . / : ; < = > ? _20
不包含空格、# $ @ [ \ ] ^ ` { | } ~、变音字母、重音字母,以及所有非 ASCII 字符-

有两个细节经常被忽略。其一,大小写具有区分意义BPW-0001aBPW-0001A 是两个不同的序列号。在仓库中把它们当作同一个,就会造成形式上并不存在的混淆。其二,部分允许的字符——/?&%+——同时也是 URL 中的控制字符。它们作为序列号是合法的,但在 Digital Link 中必须转义,否则浏览器会在错误的位置拆分地址。只要由软件自动处理就不成问题;手写链接时则是实实在在的问题。

06 · 对比

有效与无效并排对照

下面两个序列号出自同一套内部编号规则,看上去同样可用。但只有左边的能编码为 GS1 标识符——右边的败在三个单独的字符上。

序列号:有效与无效对比
接受
  • 长度14 /20 个字符
  • 字符集 GS1 CSET 82全部字符均允许
  • 公司内唯一可用
拒绝
  • 长度12 /20 个字符
  • 字符集 GS1 CSET 823 个不允许的字符
  • 公司内唯一可用
右侧序列号为何被拒绝 (3)
  1. 空格。CSET 82 不含空格字符——在路径段中它也只能以转义形式(%20)传输。
  2. 字符 # 不属于 CSET 82。在 URL 中它还会开启片段部分,扫描时标识符会被截断。
  3. 变音字母以及所有其他非 ASCII 字符均不允许——CSET 82 仅包含 A-Z、a-z、0-9 和 20 个特殊字符。

正确写法: 把 BPW 2027#Ü01 改成 BPW-2027-UE01——含义相同,字符集可编码。

两个序列号乍看都可用,但只有左侧的能编码为 GS1 标识符(AI 21)。
07 · 常见问题

真实导入中出现的六个错误

错误会发生什么如何解决
前导零丢失表格软件把 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。
08 · 在 Batteriepasswerk 中

这些规则在我们的产品中如何落地

只在录入表单中检查的格式规则,对 CSV 导入和 API 调用就不再生效。因此我们把校验放在更底层——数据库层,位于所有写入路径之后。

GTIN 在型号上,序列号在护照上
GTIN 只在型号上录入一次,适用于由该型号派生的所有单元;序列号则按单本护照生成。这样型号维护与序列化彼此分离——上千本护照继承同一个正确的 GTIN,而不必重复录入上千次。
数据模型
在保存时校验,而非在键入时
GTIN 的长度与校验位、序列号的长度与字符集,都以约束的形式存放在数据库中。违反约束的记录会被拒绝——无论它来自录入界面、导入还是 API。
校验
两个层面的唯一性
一个 GTIN 在整个平台范围内只属于一个型号——否则解析将产生歧义。序列号在公司范围内唯一。二者结合,构成一个只出现一次的 GTIN/序列号组合。
唯一性
用明确的语言代替错误代码
某个值被拒绝时,对话框会说明原因:允许哪些长度、校验位不匹配,或者 GS1 字符集允许哪些字符。提示给出的是规则,而不是行号。
错误提示

没有 GTIN 时会有备用链接——但那不是 GS1 标识符

没有 GTIN 的型号会获得一个指向内部护照编号的备用地址。二维码仍可扫描,护照也可公开访问——但这不足以满足第 77(3) 条,因为此时标识符并非来自经认可的编码体系。要合规交付护照,型号上必须有 GS1 号码。生成二维码的页面会就此提示,避免这一缺口一路带到生产环节。

一个型号如何变成上千本序列化护照,见指南 创建电池护照。除此之外还有哪些必填数据字段,见 电池护照包含哪些数据

09 · 常见问题

关于 GTIN 与序列号的常见问题

GTIN 有多少位?
GS1 规定了四种长度:GTIN-8(8 位,用于极小的商品)、GTIN-12(12 位,北美 UPC 格式)、GTIN-13(13 位,欧洲常用的 EAN 格式)以及 GTIN-14(14 位,用于外包装和贸易单元)。不存在其他长度——11 位或 15 位的号码不是 GTIN,无论看上去多么合理。四种格式的最后一位都是校验位。
GS1 校验位怎么计算?
采用模 10 方法:校验位左侧的各位依次以 3 和 1 加权,紧邻校验位的那一位权重为 3。将加权值相加,把总和补足到下一个十位数,差值即为校验位。以 GTIN-13 的 4006381333931 为例:加权和为 89,下一个十位数为 90,校验位为 1。该方法对所有 GTIN 长度完全相同。
GS1 序列号允许哪些字符?
应用标识符 AI 21(序列号)允许 1 至 20 个来自 GS1 字符集 CSET 82 的字符:26 个大写字母、26 个小写字母、10 个数字以及 20 个特殊字符(! " % & ' ( ) * + , - . / : ; < = > ? _)。空格、变音字母、带重音的字母、井号 # 以及这 82 个之外的所有字符均不包含在内。大小写具有区分意义:BPW-0001a 与 BPW-0001A 是两个不同的序列号。
为什么序列号最多只能有 20 个字符?
该长度限制来自 GS1 通用规范中对 AI 21 的规定,无论号码出现在条码、Data Matrix 码还是 Digital Link 中都同样适用。它保证同一标识符能够在所有 GS1 载体中编码。内部使用更长号码的企业,需要为护照定义一个更短且仍然唯一的派生号码——这里最常见的错误是不做唯一性检查就直接截断。
如果 GTIN 或序列号不符合格式会怎样?
二维码通常仍可扫描,但其背后的标识符不再符合 ISO/IEC 15459——而这正是欧盟电池法规第 77(3) 条所要求的。实务中还有第二重影响:贸易伙伴、市场监管机构和回收企业都会以机器方式解析该号码。校验位错误的 GTIN 会在任何人看到护照之前就被其系统拒绝。
10 · 资料来源

资料来源与延伸阅读

一次就能通过的格式

GTIN 与序列号在保存时即被校验——而不是等到扫描时才发现问题

Batteriepasswerk 在数据库层校验长度、字符集与校验位,并据此为每个单元生成 GS1 Digital Link 二维码——符合 EU 2023/1542 与 DIN DKE SPEC 99100,托管于欧盟境内。