GS1 FNC1 字符的实际十六进制/二进制值是多少?

Posted

技术标签:

【中文标题】GS1 FNC1 字符的实际十六进制/二进制值是多少?【英文标题】:What is the actual HEX / binary value of the GS1 FNC1 character? 【发布时间】:2015-09-27 21:31:53 【问题描述】:

我在***上搜索了很多页面,官方 GS1 规范,但尚未找到问题的明确答案

关于如何使用 GS1 标识符、如何使用 ZPL 打印条形码以及如何编码 FNC1 有很多信息,但我想知道该字符的实际 HEX 值。

【问题讨论】:

【参考方案1】:

FNC1 到 FNC4 等特殊功能字符属于“非数据字符”类别,可以在各种条码符号体系中进行编码,但在解码的数据流中没有任何直接的 ASCII 表示。支持此类字符的每种符号系统都有不同的方案,用于在其内部表示中对它们进行编码,这与任何面向字节的字符数据截然不同。

FNC 字符既可用作标志字符(表示对读者而言特殊的东西),也可用作格式化字符(修改编码数据的含义)。因此,它们不打算在主机系统从基本条码阅读器接收到的数据中直接传输。

每个 FNC 字符的通常用途如下:

FNC1 - 结构化数据标志字符表示 GS1 和 AIM 格式和组分隔符格式字符,以及其他用途。 FNC2 - 消息附加标志字符,用于缓冲符号组中的数据以供单次读取。 FNC3 - 用于设备配置目的的阅读器编程标志字符FNC4 - 扩展的 ASCII 格式化字符,用于对序数为 128-255 的字符进行编码。

请注意,它们可能并非都在某些条码符号体系中可用,甚至可能以不同的、非典型或重载的方式指定。

在符号的内部数据中编码 FNC 字符是通过特定于编码软件的“转义机制”完成的。例如,要将 FNC1 用于数据“(01)00312345678906(21)123456789012(30)0144”的典型 GS1 结构化数据角色中,您可能会看到 FNC1 字符转义为 FNC1,因此输入看起来像 FNC1010031234567890621123456789012FNC1300144 .但是每个库接受这些非数据字符的方式不同,有些甚至会自动插入所需的字符。

扫描条形码时,符号的内部数据通常会被解码,然后通过基本通道(例如键盘楔形)作为要根据拉丁 1 字符编码解释的字节序列传输到主机。 FNC 字符不能以这种方式表示并从数据流中排除,但它们对数据的格式化效果仍然存在。

例如,大多数符号体系的标准规定,当 FNC1 字符用作符合 GS1 应用标识符标准格式的数据中的字段分隔符时,它应该被解码并作为 GS (ASCII 29) 传输。明确指出,作为 GS1 应用程序标识符分隔符的 FNC1 字符的格式化效果是在可变长度字段的末尾放置一个 GS 字符。但在其他角色中(例如当 FNC1 用于“第一/第二位置”作为标志字符并且使用非 GS1 格式化数据时)没有格式化效果携带的数据,因此在解码过程中没有 ASCII 表示。

对数据有格式化影响的特殊功能字符的另一个实例是使用 FNC4 将其范围从 7 位 ASCII 扩展到扩展 ASCII 的符号,如 this answer 中所述。

一个微妙的技术点是,传输到主机的数据通常带有一个称为“符号系统标识符”的短符号指示标头作为前缀,它表示从中读取数据的符号的类型和用法。这通常通过符号数据中存在其他不可见的标志字符来修改,例如,以“FNC1 in first”表示存在 GS1 格式数据,或者当 FNC3 出现在符号中的任何位置时表示阅读器编程模式。详细信息是特定于符号的。

【讨论】:

有趣。但是,如果系统不确切知道 FNC1 是如何由交付系统编码的,那么系统如何正确读取以一种方式编码的条形码作为 GS1 呢?您详细介绍了解码过程,编码过程呢?假设我正在编写一个提供 GS1 条形码的系统,在生成此类数据时我应该为 FNC1 使用什么值?您从哪里获得有关解码/编码为 ASCII 29 / GS 的信息? 我已经扩展了处理编码的答案。关于我的信息来源,自 ISO/IEC 15417(代码 128)以来的几乎所有 ISO 条码规范都包含“当 FNC1 用于第一或第二位置时,它不应在传输的消息中表示......第三个或后续字符位置的 FNC1 作为控制字符 GS(值 29)传输。 (ISO/IEC 15417:2007 附录 B.4)您可以在免费提供的 GS1 通用规范中看到对 FNC1 解码的多个参考。 非常简洁实用的信息。比我目前在互联网上找到的任何东西都要好得多。非常感谢。【参考方案2】:

重要的是要知道(并正确设置扫描仪)根据 ISO/IEC 15424 将第一个位置的 FNC1 字符转换为符号系统标识符。符号系统标识符的修饰符 m 显示是否存在 FNC1 .如果不这样做,应用程序将无法再看到是否打算使用 GS1 结构。其他结构由例如标识。数据矩阵码(ISO/IEC 16022、ISO/IEC 15434)中的宏 06。它需要弄清楚我们的差异以采取正确的行动来处理数据。

【讨论】:

以上是关于GS1 FNC1 字符的实际十六进制/二进制值是多少?的主要内容,如果未能解决你的问题,请参考以下文章

python中的数据矩阵GS1

jQuery 如何获取十六进制的color值

字符c的ASCII码值是多少

正则表达式将字符串拆分为 char 但具有最大大小

如果以十进制形式收到的值是一个空字符串,我该如何将其转换为浮点数?

chr()ord()函数