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

时间:2018-11-01 09:46:30

标签: barcode barcode-scanner checksum code128

简介

步骤1

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

步骤2

然后我尝试根据给定的数据生成条形码并得到以下图像:

Original barcode 原始条形码

Generated barcode 生成的条形码

步骤3

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

Original decrypted barcode 原始解密的条形码

Generated decrypted barcode 生成的解密条形码

С澄清

  1. 如Wikipedia所说(https://en.wikipedia.org/wiki/Code_128):

      

    校验位是加权的103模校验和。它是通过将每个符号“值”的乘积的起始码“值”乘以其在条形码字符串中的位置的乘积求出的。

  2. 我试图通过我的应用程序中的Java库以及在线工具根据给定的数据生成条形码。两者都给了我相同的结果。

问题

  1. 为什么在线工具会生成没有校验和但末尾带有FNC1的条形码?
  2. 为什么条形码的开头有FNC1?
  3. Code128规范是否要求校验和?

我的想法

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

2 个答案:

答案 0 :(得分:3)

原始图像是表示以下GS1应用程序标识符格式数据的GS1-128(以前称为EAN-128)

(30)925018

含义是项数:925018

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

正确。根据定义,以FNC1字符开头的代码128是GS1-128,因此应包含根据GS1规范编码的数据。

以下答案提供的背景描述了此编码的原理:https://stackoverflow.com/a/31760872/2568535

  
      
  • 最后的FNC1只能是校验和。
  •   

在Code 128规范(和任何派生应用标准)中,校验和是必需的,并且通常不会以任何人类可读的文本形式显示。在您生成的符号中(不是GS1-128,因为没有“ FNC1开头”),如果校验和字符恰好与FNC1匹配,那只是一个巧合,尽管-正如Brian Anderson指出的那样-不会。

答案 1 :(得分:2)

原始条形码的开头是FNC1。两个条形码的末尾都没有FNC1。正如特里·伯顿(Terry Burton)所言,FNC1开头表示条形码用于GS1,该代码的数据通常表示为(30)925018。为第一个条形码计算的校验和是右侧括号中的数字09或代码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或代码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个“点”)。每个点的宽度与图形成比例。最好不要忽略每个字符的尾随“零”。它们很重要。

enter image description here