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 条码规范中是不是需要校验和?的主要内容,如果未能解决你的问题,请参考以下文章