1

在我的 iOS 应用程序中,我使用 3rd 方扫描库来扫描 Code39 条码。该软件有时会出现扫描错误(例如“13415566”的值返回为“U *”)。有时相同的条形码可以正常工作,然后再次扫描相同的代码,它是错误的。

第 3 方软件供应商报告说 Code39 不是一种“可靠”的格式,并且“它没有错误保护,并且经常可能获得错误读取”。

这对我来说似乎很荒谬。有问题的代码没有校验位,但即便如此,这肯定只是扫描软件中的错误吗?Code39 是否以这种事情而闻名?如果它有时“弄错”,它怎么可能成为一种采用的格式!

谢谢。

4

2 回答 2

4

Code 39 的可读性应该没有大问题。当在可靠扫描很重要的应用中使用时,通常会部署 Code 39,以防止误读,其形式为模 43 校验位,扫描仪配置为在将代码传递到系统之前对其进行验证。任何半体面的条形码生成器或条形码阅读器都将支持 Code 39 校验位。

由于我没有看到您正在扫描的 Code 39 条码的打印质量,因此无法确定,但是我肯定建议您使用的阅读器软件的 Code 39 扫描质量非常差。

您的条形码库可能由于以下原因而感到困惑,但如果不对设备进行大量调试,就无法确定...

下面我对齐了两个 Code 39 图像,它们是使用基于Pure PostScript 中的 Barcode Writer的在线条形码生成器创建的。顶部是包含“U”的水平翻转图像,下方是包含“13415566”的图像。

两个code 39条码对齐

从右到左读取顶部图像,您可以看到与底部图像的某些部分存在一定程度的相似性。

扫描仪可能会因为误读这个不受保护的代码 39 而被原谅,但它有以下针对它的内容:

  • 它应该在领先的开始条序列之前期待一个相当区域(空白)。
  • 在追踪止损柱序列之后应该期待一个相当的区域。
  • “U”的条形图案并不完全正确。
  • 假定的止损线顺序并不完全正确。
于 2013-11-27T13:37:26.563 回答
1

许多条码扫描仪在一行上读取黑白部分。他们不知道这条线是水平的、垂直的还是对角线的,也没有固有的方法知道这条线是从一侧“进入”条形码并从另一侧离开,还是从顶部进入,交叉条码对角线,并从底部退出。

某些条码格式(如 Interleaved 2 of 5)以条码中通常出现的模式开始和结束 [I2of5 以 BwBw 开始并以 BBwB 结束],并且从顶部或底部滑落的部分扫描可能被误读为尽管这是对较短代码的有效扫描。其他一些条形码格式以选择的模式开始和结束,因此部分扫描无法读取为有效数据。代码 39 介于两者之间。

每个有效的代码 39 条码都以 BwBBwBBwwBw 开头,以 wBwBBwBBwwB 结尾。可以让序列 wBwBB 出现在一个字符的末尾,而 BBwwBw 出现在下一个字符的开头,它们之间只有一个“w”。如果两个这样的字符对出现在条码中,它们之间出现的字符种类有限,并且扫描在正确的位置退出第一对字符,同样在正确的位置退出第二对字符,则扫描仪可能会看到一个合法形成的条形码,其内容与原始条形码没有明显相似之处。故意选择符合必要标准的条码数据并试图以一定角度扫描以产生错误读取的人,从许多扫描仪中获取错误读取将毫无困难,

如果有人担心这种误读的可能性,可以打印条形码以保证留下代码的扫描不会被视为有效。一种简单的方法是在条形码上方和下方打印黑色,这样任何通过顶部或底部进入和/或退出的扫描都会将代码视为以异常粗的黑条开始和/或结束。在人们看到“堆叠”条形码的许多地方,它们将由不包含信息的点图案分隔,而是旨在确保从一行到另一行的扫描不会被认为是有效的。

于 2013-12-05T18:23:42.787 回答