GS1-128 解析器
粘贴物流条码下方的那串字符 —— 带括号的,或者直接来自扫描器的 —— 就能看到它包含的每一个字段、每个字段是什么意思,以及它的格式是否正确。
🔒 你的数据不会离开浏览器。
让多数解析器出错的那条规则
GS1 把应用标识符分成两类。一类有预定义长度 —— 由该 AI 的前两位数字决定,而不是由整个 AI 决定 —— 它后面紧接下一个 AI,中间没有分隔符。其余全部是变长的,而且必须以 FNC1(GS 字符)结束,除非它是串里最后一个元素。
漏掉这一点,批次号就会悄悄把它后面的序列号吞进去。这串仍然「解析得出来」,只是解析出的数据是错的。本工具套用的是真正的规则,分隔符缺失时会明确告诉你,而不是递给你一个看起来合理的错误结果。
定长 AI 的前缀表
| AI 以此开头 | 元素总长度 |
|---|---|
11 | 8 个字符(含 AI 本身) |
12 | 8 个字符(含 AI 本身) |
13 | 8 个字符(含 AI 本身) |
14 | 8 个字符(含 AI 本身) |
15 | 8 个字符(含 AI 本身) |
16 | 8 个字符(含 AI 本身) |
17 | 8 个字符(含 AI 本身) |
18 | 8 个字符(含 AI 本身) |
19 | 8 个字符(含 AI 本身) |
20 | 4 个字符(含 AI 本身) |
31 | 10 个字符(含 AI 本身) |
32 | 10 个字符(含 AI 本身) |
33 | 10 个字符(含 AI 本身) |
34 | 10 个字符(含 AI 本身) |
35 | 10 个字符(含 AI 本身) |
36 | 10 个字符(含 AI 本身) |
41 | 16 个字符(含 AI 本身) |
00 | 20 个字符(含 AI 本身) |
01 | 16 个字符(含 AI 本身) |
02 | 16 个字符(含 AI 本身) |
03 | 16 个字符(含 AI 本身) |
04 | 18 个字符(含 AI 本身) |
其余所有 AI 都是变长的,都需要分隔符。
日期:两位年份、滑动世纪,以及日为 00
GS1 的日期是 YYMMDD。两位年份按滑动窗口解析 —— 从今天往前 49 年、往后 50 年 —— 所以同样的数字,在不同时间读会落在不同的世纪。而日为 00 不是错误:它表示该月月末,「最佳食用期至三月底」就是这么编码的。
(15) 最佳食用期不是 (17) 有效期
最佳食用期是品质日期 —— 过了之后商品仍然安全。有效期是安全日期。把两者搞混是合规问题,不是格式问题,而这两个 AI 在键盘上恰好挨着。
本工具执行的全部检查(共 10 条规则)
AI-S01变长字段之后缺少 FNC1 分隔符
变长元素必须以 FNC1(编码为 GS 字符)结束,除非它是整串的最后一个元素。没有它就无从判断数据在哪里结束、下一个 AI 从哪里开始 —— 扫描器会把后面的 AI 当成你批次号的一部分读进去。
修复: 在变长元素之后插入 FNC1(GS)分隔符。
来源: GS1 General Specifications — Application Identifier definitions and the table of predefined-length AIs. Rules verified against real GS1-128 element strings in our regression tests.
AI-S02定长字段之后多了分隔符
长度由前两位预先定义的 AI 后面不得跟分隔符。多出来的 FNC1 是编码器常见的 bug,会让整串不符合规范。
修复: 去掉 (01)、(17)、(00) 这类定长元素之后的分隔符。
来源: GS1 General Specifications — Application Identifier definitions and the table of predefined-length AIs. Rules verified against real GS1-128 element strings in our regression tests.
AI-S03元素被截断
整串在这个元素凑齐它的 AI 所要求的字符数之前就结束了。
修复: 确认条码被完整扫入;读到一半通常意味着符号有破损。
来源: GS1 General Specifications — Application Identifier definitions and the table of predefined-length AIs. Rules verified against real GS1-128 element strings in our regression tests.
AI-F01数据长度不对
数据与它的 AI 所定义的长度不符 —— 定长 AI 需要恰好那么多字符,变长 AI 不得超过它的上限。
来源: GS1 General Specifications — Application Identifier definitions and the table of predefined-length AIs. Rules verified against real GS1-128 element strings in our regression tests.
AI-F02该 AI 不允许的字符
数字型 AI 只接受数字。字母数字型 AI 使用 GS1 的 AI 字符集 —— 大写字母、数字与有限的一组符号;小写字母不允许。
来源: GS1 General Specifications — Application Identifier definitions and the table of predefined-length AIs. Rules verified against real GS1-128 element strings in our regression tests.
AI-C01校验位不匹配
GTIN、SSCC、GLN 与 GSIN 的取值都带一位 GS1 模 10 校验位。不匹配意味着号码本身是错的,而不只是格式写法奇怪。
来源: GS1 General Specifications — Application Identifier definitions and the table of predefined-length AIs. Rules verified against real GS1-128 element strings in our regression tests.
AI-D01日期不合法
GS1 的日期是 YYMMDD。日为 00 是合法的,表示「月末」;其余不可能的日期都是错误。
来源: GS1 General Specifications — Application Identifier definitions and the table of predefined-length AIs. Rules verified against real GS1-128 element strings in our regression tests.
AI-D02两位年份按滑动窗口解释
GS1 把两位年份解析到「当前年份往前 49 年到往后 50 年」这个区间。所以同样的数字,在不同时间读出来会落在不同的世纪。
来源: GS1 General Specifications — Application Identifier definitions and the table of predefined-length AIs. Rules verified against real GS1-128 element strings in our regression tests.
AI-U01未知的应用标识符
这个 AI 不在本工具的表里。GS1 会不断新增 AI,所以未知不等于无效 —— 但没有定义就无从知道它的数据该有多长,解析到此为止。
来源: GS1 General Specifications — Application Identifier definitions and the table of predefined-length AIs. Rules verified against real GS1-128 element strings in our regression tests.
AI-L01元素重复出现
多数 AI 在一个单元数据串里只能出现一次。重复通常意味着两个条码被拼接在了一起。
来源: GS1 General Specifications — Application Identifier definitions and the table of predefined-length AIs. Rules verified against real GS1-128 element strings in our regression tests.
本工具认识的应用标识符(共 30 个)
这里保守地收录了日常贸易与物流标签上会见到的 AI。不在这份清单里的 AI 会让解析停下来,而不是去猜 —— 没有定义就无从知道它的数据该有多长。
| AI | 含义 | 数据 |
|---|---|---|
(00) | SSCC 系列货运包装箱代码 | 18 位数字,定长 |
(01) | GTIN 全球贸易项目代码 | 14 位数字,定长 |
(02) | 内含贸易项目的 GTIN | 14 位数字,定长 |
(10) | 批次号 | 最多 20 个字符,变长 |
(11) | 生产日期 | 6 位数字,定长 |
(12) | 到期日 | 6 位数字,定长 |
(13) | 包装日期 | 6 位数字,定长 |
(15) | 最佳食用期 | 6 位数字,定长 |
(16) | 售卖截止日 | 6 位数字,定长 |
(17) | 有效期 | 6 位数字,定长 |
(20) | 变体号 | 2 位数字,定长 |
(21) | 序列号 | 最多 20 个字符,变长 |
(22) | 消费品变体 | 最多 20 个字符,变长 |
(30) | 可变数量 | 最多 8 位数字,变长 |
(37) | 贸易项目数量 | 最多 8 位数字,变长 |
(90) | 双方约定信息 | 最多 30 个字符,变长 |
(240) | 附加商品标识 | 最多 30 个字符,变长 |
(241) | 客户物料号 | 最多 30 个字符,变长 |
(400) | 客户采购订单号 | 最多 30 个字符,变长 |
(401) | 发货批号(GINC) | 最多 30 个字符,变长 |
(402) | 装运号(GSIN) | 17 位数字,定长 |
(410) | 收货方 / 送达方 GLN | 13 位数字,定长 |
(411) | 开票方 GLN | 13 位数字,定长 |
(412) | 供货方 GLN | 13 位数字,定长 |
(413) | 最终收货方 GLN | 13 位数字,定长 |
(414) | 实体位置 GLN | 13 位数字,定长 |
(3100) | 净重(kg) | 6 位数字,定长 |
(3103) | 净重(kg,3 位小数) | 6 位数字,定长 |
(3200) | 净重(lb) | 6 位数字,定长 |
(3202) | 净重(lb,2 位小数) | 6 位数字,定长 |
关于这些规则。 每一条都有编号、严重级别和通俗解释。每个来源链接都已登记在案,并对线上页面实际复验过,而不是凭印象写上去的. 规则如何编写、测试与保持更新 →