获取以 GS1 应用标识符标准格式存储数据的 GS1 类型条形码所表示的信息涉及两个过程。
-
萃取通过扫描符号获得的 GS1 结构数据中包含的数据字段(称为应用标识符)。这始终包含称为 GTIN-14 的商品的唯一标识符,以及may包括补充信息,例如有效期、批号等。
该过程可以由独立的应用程序执行。
-
Lookup在数据库中提取提取的 GTIN,无论是在您的应用程序本地还是通过某些公共 API,以提供原产国、制造商以及可能的商品描述的文本表示。
为了全面执行此过程,应用程序需要访问外部资源。
背景:GS1 应用标识符标准格式组成
GS1 格式的数据由应用程序标识符 (AI) 和值的串联列表组成,以代表 GTIN 的 AI (01) 开头。
例如,数据“(01)95012345678903(10)000123(17)150801”代表以下信息:
GTIN: 95012345678903
BATCH/LOT: 000123
USE BY OR EXPIRY: 1st August 2015
第 3 节:GS1 应用标识符定义 of the GS1 一般规格 http://www.gs1.org/docs/barcodes/GS1_General_Specifications.pdf提供了每个应用程序标识符的含义,重要的是还说明了 AI 值是否按照定义可变长度 or 固定长度在这种情况下,提供了强制长度。
GS1 条形码使用特殊的非数据字符 (FNC1) 来指示数据符合 GS1 应用标识符标准格式,并从下一个 AI 中定界可变长度数据字段的末尾。例如,上述数据可以用 Code 128 符号编码为{FNC1}019501234567890310000123{FNC1}17150801
生成以下 GS1-128 符号:
When this symbol is read by a barcode scanner it is decoded as follows[†]:
019501234567890310000123{GS}17150801
请注意,初始 FNC1 非数据字符已被丢弃,并且用于可变长度 AI 分隔符角色的 FNC1 已由 GS 字符(ASCII 值 29)表示。
萃取(以及可选的验证)
GTIN 和任何补充信息的提取可以直接由您的应用程序执行。
要从条码扫描仪解码的 GS1 符号数据中提取原始应用程序标识符数据,需要您的应用程序包含一个数据结构,我们将其称为AI-TABLE
将 AI 模式映射到从上面链接的 GS1 通用规范部分提供的数据导出的值的长度:
AI | N (value length)
-------------------------
(00) | 18
(01) | 14
(10) | variable
(17) | 6
(240) | variable
(310n) | 6
(37) | variable
...
有了这个功能,您就可以从扫描的条形码数据中提取 AI 值,如下所示:
while more data:
AI,N = Entry from AI-TABLE matching a prefix of the data, otherwise FAIL.
if N is fixed-length:
VALUE = next N characters
else N is variable length:
VALUE = characters until "GS" or end of data
emit: (AI) VALUE
在实践中,您可以选择在您的产品中包含更多通用规范中的数据。AI-TABLE
允许您的应用程序对每个执行增强验证VALUE
的类型和长度。然而,上面的内容足以提取给定的数据,例如表示您正在查找的到期日期的 AI (17)。
2022 年 8 月更新:GS1 最近发布了 GS1 语法引擎,这是一个 C 库,是处理 GS1 应用程序标识符语法扫描数据的参考实现:https://github.com/gs1/gs1-syntax-engine https://github.com/gs1/gs1-syntax-engine
Lookup
要获取您感兴趣的其余数据(未直接编码在条形码中),例如商品名称和制造商详细信息,需要您使用外部资源(例如本地产品数据库或公共数据库之一)查找提取的 GTIN可用的 UPC 数据库 API。
GTIN 本身包含原产国(实际上它代表制造商注册的国家 GS1 成员组织,因此不完全是原产国)、制造商标识符 – 这些一起被称为 GS1 前缀,长度可变,并且由 GS1 分配 - 其余数字代表由制造商自由分配的产品代码。
给定 GTIN 后,某些 UPC 数据库将仅提供与 GS1 前缀相关的详细信息,例如 GS1 成员组织和制造商的文本表示。其他人试图维护常见商品的单独 GTIN 分配记录,但由于没有强制注册实时 GTIN 分配,因此该数据总是有些不完整且过时。
的答案这个问题 https://opendata.stackexchange.com/q/562提供一些免费产品信息平台的示例。
[†] In fact you might see ]C1019501234567890310000123{GS}17150801
in which case the leading symbology identifier for GS1-128 ]C1
can be discarded.