如何理解条形码Code128中的功能符FNC1、FNC2、FNC3、FNC4?
标准文档中的解释
在【GBT 18347-2001】标准文档中,此四个功能符的描述摘抄部分内容如下:
- 【FNC1】:用于EAN.UCC系统、国际自动识别制造商协会(AIM)专用、其他应用、数据传输。
- 【FNC2】:(信息添加)指示条码识读器临时储存包含FNC2字符的符号中的数据并将之作为下一个符号的数据的前缀来传送。这可用于在传送之前将几个符号连接。该字符在符号中的任何位置都可出现。当数据的次序很重要时,那么需要确定符号能按正确的顺序识读。
- 【FNC3】:(初始化)指示条码识读器将包含FNC3字符的符号中的数据作为初始化指示或对条码识读器的重新编程。符号里的数据不被条码识读器传送。该字符可在符号中的任何位置出现。
- 【FNC4】:用于表示在ASCII值要加上128。如果使用一个FNC4字符,在该字符后面的一个数据字符的ASCII值要加上128。如果使用两个连接的FNC4字符,其后的所有数据字符的ASCII值应加上128。
通俗易懂的解释
标准文档中的描述,并不易读懂,以下多零以自己理解翻译为更加易懂的描述。
- 【FNC1】
主要用于EAN.UCC系统,即GS1-128码制中。由于GS1-128也是使用CODE128为编码规则,对于如何区分GS1-128、CODE128,FNC1起到关键作用。
同样也是在GS1-128码制中,GS1-128支持一个条形码中读出多项不同含义的数据,然而每一项数据的长度可能不相同。
因此,对于数据域的可变长度的数据结尾处,需要加上FNC1,起到数据项之间的分隔作用,让扫码设备扫码时可以区分条形码中每一项不同数据,不至于数据混乱。
- 【FNC2】
是用于告诉扫码设备,将两个条形码的内容合并显示,扫码设备当扫描到以FNC2开头的条形码内容时,不显示,仅储存,接下来扫描第二个条形码时,将储存起来的条形码内容,与第二个条形码内容合并显示。
例如,两个条形码内容,第1个是“{FNC2}123”,第2个是“456”,扫码设备连续扫描这两个条码时,将会合并两个条形码的内容,显示为“123456”。
然而,这需要扫码设备支持该功能,多零尝试多个扫码设备,均没有此功能,可能多零使用的扫码设备不够专业。
- 【FNC3】
结合FNC2使用,用于清除重置FNC2储存的条形码,取消合并储存的内容。
例如,连续扫码,前一个条形码使用FNC2,条形码内容已储存,理应会与下一个条形码内容合并,但是如果不希望合并,想单独显示第2个条形码内容,就需要使用上FNC3功能符。
类似上面的例子,两个条形码内容,第1个是“{FNC2}123”,第2个是“{FNC3}456”。
扫描第1个条形码时,遇到FNC2,储存内容“123”,准备为下一个条形码合并;但扫描第2个条形码,遇到FNC3,则清空储存,合并取消;最终显示为“456”。
另外,一些对安全有要求的单独的条形码,会在条形码内容前额外加上FNC3字符,主动清空扫码设备储存内容,预防被其他此前的条形码合并内容,造成数据混乱。
- 【FNC4】
CODE128定义字符集的最大范围是ASCII里的128个字符,也即是使用ASCII里的字符生成的条形码,扫码后显示的也是对应的ASCII的字符。
但是,ASCII的扩展码(即在ASCII标准字符后面的128个字符)有更多丰富的符号,比如ASCII的扩展码中有贸易结算中的常用的货币符号,那么如果希望扫码显示ASCII的扩展码,那就需要使用FNC4。
扫码设备会在读到FNC4字符后,将紧接着的标准ASCII字符通过加128,转为扩展的ASCII字符,例如“%”在ASCII的序号是37,加上128后,等于165,扩展的ASCII字符中,165等于符号“¥”,最终显示符号“¥”。
举个例子,将内容为“{FNC4}%99.9”生成条形码,扫码后会显示“¥99.9”,以下图示的条形码可以扫码查看效果。
上图条形码编辑工具来源于条形码生成器,无须任何安装,点击即可在线使用。
另外,添加1个FNC4,会将后面紧接的1个字符转换为ASCII的扩展码,如果希望将后面所有字符都转换为ASCII的扩展码,则添加两个连续的FNC4即可。
添加两个连续的FNC4之后,如果希望取消转换,即再添加两个连续的FNC4即可,即是这四个FNC4之间里面的字符启动转换,之外的字符保持不变。
-----------------------------
以上是多零对FNC1、FNC2、FNC3、FNC4的理解,仅FNC1由于GS1-128的硬性规定使用最多之外,其他的三个功能符应用相对比较少,网上相关的有价值的资料也非常少,难以明了。可能会存在理解偏差,如果您发现有不正确的内容,请告知多零以更正,非常感谢!