You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ZPL中编码FNC1字符以生成符合规范的GS1 QR码

ZPL编码GS1 QR码时FNC1字符配置问题

我在使用ZPL编码GS1 QR码时遇到了问题,核心难点是不知道如何编码前置的FNC1字符来标识该QR码为GS1格式,尝试了多种方案都得到了混杂甚至怪异的结果,始终不清楚遗漏了什么环节。

说明:请忽略GS1应用标识符(AI)的顺序,我为了测试可变长度标识符的终止/分隔能力打乱了顺序,从GS1规范角度来看这不影响条码本身的有效性。


测试过程

第一次测试

^XA
^FO100,100^BQ,2,10
^FH^FDLA,01085800008580371722022210ABC_1D2112345_1D422730_1D3103000213^FS
^XZ

这个方案看起来是对的:宽松的移动端扫码应用barValid可以按照GS1应用标识符解码内容,Axicon 2D条码校验器识别该码为有效QR码,GS1 Interpreter扫描工具也识别其为有效GS1 QR码。但设置为仅接受GS1条码的POS系统(Zebra MP 7000收银机)无法识别该码,这是系统仅接收GS1条码、忽略其他类型条码的标准表现。

临时解决方案是在POS系统中开启所有条码类型的识别权限,依靠系统的鲁棒性可以将该码识别为GS1 QR码解码,但它本质上并不符合GS1 QR码规范。同时,更严格的移动端解码工具(ID automation出品的Barcode Data Decoder / Verifier)也不识别该码为GS1 QR码,判断是准确的。


第二次测试

^XA
^FO100,100^BQ,2,10
^FH^FDLA,_1D01085800008580371722022210ABC_1D2112345_1D422730_1D3103000213^FS
^XZ

和第一次的代码几乎一致,仅在字符串开头添加了_1D(分组分隔符),希望它可以起到FNC1的作用,但实际没有效果,扫码结果和第一次完全相同。

之后我尝试了最直接的方案:在Zebra Designer中生成条码,打印输出为.prn文件后用文本编辑器打开。意外的是,当我设置生成GS1 QR码时,.prn文件中该条码是作为图形元素存在的。之后我尝试创建普通QR码,但插入FNC1字符和GS1 AI字符串,这次成功了,.prn文件显示FNC1被编码为\BC(或_BC)。打印后扫描这个在GS1 AI字符串开头插入FNC1的“人工伪造”GS1 QR码,所有扫码设备都识别为有效GS1 QR码,POS系统也可正常读取,甚至Axicon校验器也判定合格。

我把该.prn文件的内容复制到在线Labelary ZPL预览工具中,扫码得到的字符串包含奇怪的中文类乱码,大概率是字符集设置错误导致的。之后我尝试直接打印该.prn文件,结果同样是乱码。只有直接从Zebra Designer打印标签时,GS1 FNC1才能正常工作,导出为.prn文件就会出问题。这让我判断需要调整字符集,因此我决定使用ZPL中QR码的混合模式,得到了另一组有意思的结果。


第三次测试

^XA
^FO100,100^BQ,2,10
^FH^FDD01018F,LA,01085800008580371722022210ABC_1D2112345_1D422730_1D3103000213^FS
^XZ

结果非常奇怪:宽松的移动端应用识别为GS1 QR码,POS系统也将其判定为有效GS1 QR码并解码全部内容,GS1 Interpreter工具也识别为有效GS1 QR码。但Axicon 2D校验器完全不认为这是一个有效条码,连普通QR码都不识别,没有执行任何分析,说明这个条码的格式存在严重问题,更严格的移动端应用也不识别其为有效GS1 QR码。

之后我又尝试在GS1字符串开头添加_1D,没有任何效果:

^XA
^FO100,100^BQ,2,10
^FH^FDD01018F,LA,_1D01085800008580371722022210ABC_1D2112345_1D422730_1D3103000213^FS
^XZ

结果和未添加_1D的版本完全一致。

我还尝试使用^FH\指令将下划线_替换为反斜杠,没有任何效果;也尝试在代码中插入\BC、_BC字符,没有成功;甚至尝试了GS1 DataMatrix中用作FNC1的~1、\7E1,也没有效果。看起来我只需要在条码内容开头添加FNC1字符即可,但我不知道应该使用什么字符/字符串,甚至不确定我的^FD设置是否正确。


补充说明

  • 使用Zebra Designer打印的合规GS1 QR码可以通过所有上述测试,被所有设备和应用识别,因此可以确定设备和应用的设置是正确的。
  • 我知道其他编程语言有可快速生成GS1 QR码的库,比如bwip-js,但我的需求是必须使用ZPL实现;我也知道如何生成GS1 DataMatrix,但我需要的是GS1 QR码。
    不同设备和应用给出的混杂结果让这个问题非常令人困惑。

编辑

在通读GS1规范和QR码标准后我了解到,生成GS1 QR码需要使用QR码混合模式0101(FNC1在首位置),但原生ZPL即便使用混合模式也无法生成GS1 QR码,这大概率是ZPL待修复的问题,或是待新增的功能,就像之前相对正方形GS1 DataMatrix晚推出的矩形GS1 DataMatrix功能一样,因此我原本以为只能等待Zebra推出相关更新。


编辑2(最终解决方案)

使用Zebra Link-OS 6.6及以上版本的固件,已经可以在ZPL中生成GS1 QR码。ZPL代码示例如下:

^XA
^FO100,700
^BQN,2,10
^FH\^FD>;>8010858000000000921567123^FS
^XZ

解码结果:

GTIN             (01) 08580000000009
SERIAL           (21) 567123

该方案存在部分限制,可查阅斑马官方说明文档了解详情。


内容的提问来源于stack exchange,提问作者Viliamm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:54:04