什么是GS1-128, 一篇文章讲明白
之前在国际物流公司做开发,公司打算对接USPS EVS,需要根据USPS的标准自画物流面单。制作标签问题不大(用html实现标签样式,然后用html转pdf),但是其中条码部分怎么都搞不出来,那时候才知道原来条形码不止有Code 128,还细分很多种类。USPS的条码叫Intelligent Mail® Package Barcode (IMpb),用的GS1-128格式,当时被GS1, AI, FNC1等概念搞得一头雾水,还好最后冲破重重险阻做出条码,出色完成任务。
今天,就用这篇文章帮大家搞清楚GS1-128, AI, FNC1等概念,希望遇到相同问题的小伙伴能够顺利解决问题!
1. 什么是 GS1?
GS1 是一个中立的、非营利性的全球性组织,负责制定和维护供应链领域最广泛使用的标准体系。GS1 系统为产品、物流单元、资产、位置和服务等提供全球唯一的识别号,从而提高供应链的效率和可视性。它广泛应用于零售、医疗、制造、物流等多个行业。
简而言之,GS1 致力于通过统一的标准帮助企业在全球范围内实现数据互通互认,涵盖了条码、电子数据交换(EDI)、RFID 标签、二维码等多项标准体系。
2. 为什么叫 GS1-128?GS1-128 与 Code 128 的关系和区别
GS1-128(曾称 UCC/EAN-128)本质上是基于 Code 128 条码符号体系的一个专用变体。Code 128 是一种高密度的线性条码类型,能够编码全部 ASCII 字符,广泛用于物流、资产管理、仓储等场景。
上世纪 80 年代,Code 128 被国际商品编码协会(EAN)和美国统一代码委员会(UCC)采纳,用于传递结构化数据,比如商品代码、批次号、有效期等。当时这种编码方式被称为 EAN-128 或 UCC-128。2005 年,随着 EAN 与 UCC 的合并,条码标准统一归 GS1 组织管理,并正式更名为 GS1-128。
GS1-128 与普通 Code 128 的主要区别如下:
特性 | Code 128 | GS1-128 |
---|---|---|
用途 | 通用编码,适合任意字符信息 | 专用于供应链、物流等场景 |
数据结构 | 无固定格式 | 使用标准化的应用标识符(AI) |
起始内容 | 起始符(Start A/B/C) | 起始符 + 功能码 FNC1 |
数据说明 | 无说明,仅是字符组合 | 每个数据字段由 AI 指明含义 |
多字段支持 | 通常只表示单个信息 | 支持多个字段(如 GTIN、批次、有效期) |
例如,Code 128 可以编码一个自定义的资产编号 ABC123456
,而 GS1-128 则可以同时编码 GTIN、批次号、重量、生产日期等多种结构化数据,适合用于商品追踪和自动化处理。
3. GS1-128 条码格式结构
GS1-128 条码是结构化的,严格遵循以下格式:
1
起始符 (Start A/B/C) + FNC1 + [AI+数据字段]... + 校验符 + 停止符
结构说明:
- 起始符(Start A/B/C):指定编码模式(A: 控制字符,B: 混合,C: 数字压缩)。
- FNC1(功能字符1):表示该条码是 GS1-128 格式,并触发解析器使用 AI 规则解码。
- 应用标识符(AI):说明后续数据的类型和长度,例如:
- (01) 表示 GTIN(全球贸易项目代码);
- (10) 表示批次号;
- (17) 表示有效期。
- 数据字段:紧跟 AI 的具体数据,部分字段支持可变长度。
- FNC1(可选):用于分隔可变长度字段与下一个字段。
- 校验符与停止符:确保条码扫描正确结束。
例如,一个包含 GTIN 和批次号的条码,其内容可能为:
1
FNC1 01 09501101530002 FNC1 10 ABC123
在人类可读格式中通常显示为:
1
(01)09501101530002(10)ABC123
而作为解码器,对于除了第一个FNC1,在数据中间出现的其他的FNC1,都应该替代为ASCII中GS字符=0x1D=29。而第一个FNC1,按理来说,只是GS1-128条码的标示性的内容,不属于条形码中的数据,所以不应该传输出来。
所以,解码后,输出的数据是:
1
0109501101530002[GS]10ABC123
其中 [GS]
代表ASCII中的GS字符,这里的 GS
跟 GS1
中的 GS
不一个意思。
GS是ASCII的控制字符中的其中一个,关于ASCII控制字符的详细解释,可参考ASCII字符集中的功能/控制字符
4. 应用标识符(AI)详解与示例
GS1 的“应用标识符(AI)”系统用于定义条码中每个数据字段的含义和格式。AI 是一个由 2~4 位数字组成的前缀,后跟具体数据。
常见的 AI 示例:
AI | 含义 | 数据格式 | 示例 |
---|---|---|---|
01 | 全球贸易项目代码(GTIN) | 固定14位数字 | 09501101530002 |
10 | 批次号 | 可变长,最多20字符 | ABC123 |
17 | 有效期 | YYMMDD,6位数字 | 240930(表示2024年9月30日) |
21 | 序列号 | 可变长,最多20字符 | SN202406A |
例如,一个条码可能编码如下信息:
1
(01)09501101530002(17)240930(10)BATCH-A1(21)SN202406A
这表示:
- 产品 GTIN 为 09501101530002;
- 有效期为 2024年9月30日;
- 批次号为 BATCH-A1;
- 序列号为 SN202406A。
在条码符号中,可变长度字段之间通常需要用 FNC1 做分隔,防止解析混淆。
5. 功能字符 FNC1 的作用与示例
FNC1(Function Code 1)是 GS1-128 的关键控制字符,主要有两个作用:
起始识别
条码开头的 FNC1 用于告诉扫描器该条码为 GS1 格式,后续将包含应用标识符(AI)编码的数据。
字段分隔符
当一个 AI 的数据字段是可变长度,且后面还有其他字段时,必须使用 FNC1 分隔。否则系统无法判断数据何时结束。
示例
条码数据部分为:
1
FNC1 01 09501101530002 FNC1 10 BATCH-ABC FNC1 17 240930
可解析为:
- AI 01:GTIN = 09501101530002(固定14位)
- AI 10:批次号 = BATCH-ABC(可变)
- AI 17:有效期 = 2024年9月30日
因为 AI 10 是可变长字段,后面接有 AI 17,所以在批次号之后添加一个 FNC1 分隔符,确保识别正确。
总结
GS1-128 是一个功能强大、结构清晰的条码标准,广泛用于全球供应链系统。它继承了 Code 128 的高密度编码能力,并在其基础上加入应用标识符(AI)和功能字符(FNC1),使得一个条码能同时携带多个有意义的数据字段(如产品编号、批次、有效期等)。
通过 GS1-128,企业可以实现物流追踪、仓储管理、产品溯源等多种关键功能,是现代供应链中不可或缺的重要工具。
如需生成 GS1-128 条码,可使用专业条码生成软件(如 Bartender、ZebraDesigner)或编程工具(如 python-barcode、ZXing.Net、BarcodeLib、Barcode4J 等)。
这里推荐两个当时用的两个解析条码的网站,生成GS1-128条码后可以用来检查格式对不对。