Code128 条码规范中是不是需要校验和?

Posted

技术标签:

【中文标题】Code128 条码规范中是不是需要校验和?【英文标题】:Is a checksum required in the Code128 barcode specification?Code128 条码规范中是否需要校验和? 【发布时间】:2019-04-05 12:37:29 【问题描述】:

简介

步骤 1

我尝试使用移动条形码阅读器和在线工具读取条形码(见下图)并得到它:数据 - 30925018,可视化算法 - Code128C

第二步

然后我尝试从给定数据生成条形码并得到这些图像:

原始条码

生成的条码

第三步

如您所见,图像是不同的。所以,我决定自己解密。结果如下:

原始解密条码

生成的解密条码

澄清说明

    正如***所说 (https://en.wikipedia.org/wiki/Code_128):

    校验位是加权模 103 校验和。它的计算方法是将起始代码“值”与每个符号的“值”乘以其在条形码字符串中的位置的乘积。

    我尝试通过我的应用程序中的 Java 库和在线工具从给定数据生成条形码。两者都给了我相同的结果。

问题

    为什么在线工具生成的条码没有校验和,但末尾有 FNC1? 为什么条码开头有 FNC1? Code128 规范是否需要校验和?

我的想法

我认为GS1-128规范可能是条形码开头的FNC1的原因 最后的 FNC1 可以只是一个校验和。这只是一个巧合。

【问题讨论】:

【参考方案1】:

原始图像是一个 GS1-128(以前称为 EAN-128),代表以下 GS1 应用标识符格式的数据:

(30)925018

意思是项数:925018

我认为 GS1-128 规范可能是条形码开头的 FNC1 的原因

正确。根据定义,第一个位置以 FNC1 字符开头的 Code 128 是 GS1-128,因此应该包含根据 GS1 规范编码的数据。

以下答案中提供的背景描述了这种编码背后的原理:https://***.com/a/31760872/2568535

最后的 FNC1 可以只是一个校验和。

校验和在 Code 128 规范(以及任何衍生应用程序标准)中是强制性的,通常不会以任何人类可读的文本显示。在您生成的符号中(不是 GS1-128,因为没有“FNC1 in first”),如果校验和字符恰好与 FNC1 匹配,那只是巧合,尽管 - 正如 Brian Anderson 所指出的 - 它不匹配。

【讨论】:

【参考方案2】:

原始条码的开头是 FNC1。两个条码最后都没有 FNC1。正如 Terry Burton 所说,开头的 FNC1 表示条形码用于 GS1,该代码的数据通常表示为 (30)925018。为第一个条码计算的校验和是数字 09 或 Code 128 字符 ')' 用于右括号。

105 102 30*2 = 60 92*3 = 276 50*4 = 200 18*5 = 90 (105 + 102 + 60 + 276 + 200 + 90) = 833 833 % 103 = 09 (')')

没有 FNC1 的条形码的第二个校验和是数字 26 或 Code 128 字符“:”代表冒号。

105 30 92*2 = 184 50*3 = 150 18*4 = 72 105 + 30 + 184 + 150 + 72 = 541 541 % 103 = 26 (':')

有可能校验和等于 FNC1 字符吗?是的。校验和是对条形码中的元素和数字 103 的加权和进行取模运算符的结果,因此高达 102 (FNC1) 的任何数字都可以是校验和的结果。因为 Code 128 标准没有对校验和位置的字符(STOP 之前的最后一个字符)赋予任何特殊意义,所以这无关紧要。

当您尝试破译 Code 128 条形码时,请记住没有字符间距之类的东西。一个字符将具有完全相同的宽度(11 个“点”),除非它是停止字符(在这种情况下为 13 个“点”)。每个点的宽度随图形缩放。你最好不要忽略每个字符的尾随“零”。它们很重要。

【讨论】:

以上是关于Code128 条码规范中是不是需要校验和?的主要内容,如果未能解决你的问题,请参考以下文章

条码类型code128是啥意思

code128条形码的开始停止字符是啥

检查最终字符串中的 ITF 或 Code 128 条码完整性

Adobe Acrobat 表单中的 Code128 条码

带波浪号和星号的 code128 条码

Code 128 (dhl) 条码和条码中缺少的东西