如何生成可可靠扫描的小型、高密度线性条码?

How do you generate small, high-density linear barcodes that scan reliably?

我正在努力将 POS 系统集成到我的网站。所以我想生成条形码。我使用 SKU 作为编码甲酸盐的数据字段是 XXXXX-XXX-XXX-XXX

X 是一个从 0 到 9 的数字,所以经过研究我发现代码 128 是最好的,如果我错了,请纠正我。尺寸问题,物品上的标签为 2' x 3 1/2' 英寸,当我使用 barbecue 生成条码并调整图像大小时,扫描仪无法读取条码。那么你能解释一下尺寸限制是什么吗?我能得到的最小尺寸是多少英寸。

高质量条码的生产需要从头到尾精确控制打印过程。在这里,我提供特定于 Code 128 的指南以及适用于一般线性条码的指南。

128码优化

对于 Code 128 的一般用途没有强制性的大小限制,但是 Code 128 在特定行业的应用确实定义了此类限制。对于您的内部用途,实际上只有实际限制会决定尺寸的上限和下限,例如打印机的保真度和扫描仪的功能。

您应该确保数据可以在 Code 128 中尽可能紧凑地表示,因为这将减少所需的柱数和 space 元素,这将在调整符号大小时提供更大的灵活性。例如,通过使用纯数字数据可以有效地使用双密度“模式 C”数字压缩。有关详细信息,请参阅 this answer

这引出了一个问题,您是否可以在扫描符号后从您的 SKU 中删除破折号并在您的应用程序中重新引入?考虑带和不带破折号的 SKU 代码 128 的不同宽度,以查看其影响:

必须在符号的两端保持至少十倍于 X 维度(窄条的宽度)的静区。如图所示,静区应被视为 Code 128 符号的组成部分。

线性条形码优化的一般指导

打印符号时,您应该尽量扩大条形码的宽度,前提是条形码能够舒适地位于扫描仪的视野内,但要遵守某些限制条件。

避免抗锯齿,因为扫描仪在边缘清晰、对比度高的情况下效果最佳。

如果您使用的是低分辨率打印过程,那么确保输出符号的 X 维度是打印机像素大小的整数倍尤为重要。通过这种方式,您可以避免本应具有相同宽度的线条由于像素掠过而被栅格化为不同的宽度,如此图所示。

对于某些打印过程,软件可能还需要通过将条的宽度减少一个小的固定量来补偿“打印增长”(由于墨水渗出和过程中的其他缺陷),同时保持准确的边到边间距。

代码 128 (ISO/IEC 15417) 的规范描述了后面的过程如下:

Graphics software used to create bar codes on pixel-based printers must scale each bar and space exactly to the pixel pitch of the printer being used. For edge to similar edge decodable symbologies like Code 128 the number of pixels comprising each symbol character must be a fixed and constant integer multiple of the number of modules in the symbol character. // General purpose printing software designed to support a wide range of printers should provide the user the capability of adjusting the X dimension and bar width growth or loss.

演示了如果不遵守这些过程控制会发生什么。

简短的回答就是为了这个目的,我会使用带有“Code 128”符号系统的免费开源“Zint barcode studio”,并手动生成和检查我的网站所需的所有条码图像。

更广泛的答案: 有很多条形码和很多可用的软件,但出于实用目的,有一些限制:

  1. 您通常希望使用通用条形码,而不是像 UPC/EAN 之类的一些专门的东西,绝对不是您自己想出的东西。
  2. 您希望能够使用市场上最便宜和最丰富的二手主力扫描仪,这些扫描仪已经在任何至少有点现代化的仓库中可用。像霍尼韦尔 1250 甚至更便宜的东西。如果像 DataMatrix 这样的东西在密度、纠错潜力和额外功能方面都无法击败,为什么还要费心去使用线性条码。
  3. 您希望条码尽可能防傻,并尽可能抵抗部分扫描或损坏的条码扫描。

N2 几乎只剩下 Codabar、Code11、Code32、Code93、Code128、EANs/UPCs、GS1 Databar 和 i2of5。所有 GS1 的东西都太新了,不可能的——只有相对现代的扫描仪支持它们。它还采用特定的数据格式,并且对于某些实现和扫描器,它可能会非常烦人。部分中文扫描仪型号不支持 Code93,一般比较少见。 EAN/UPC 违反要求 N1。 i2of5 代码没有 start/stop 符号并且违反了要求 N3。 Codabar 和 Code 11 只能对数字和几个额外的字符进行编码,但能够使用您自己的特殊格式将提供额外的保护,防止一些不相关的条形码,因此有助于 N3 的发展。在其余代码 Code39 和 Code128 中,第二个提供了更高的抗损坏线能力,并且整体条码密度明显更高。

这就是为什么我认为 Code128 是最好的线性条码。对于使用 90 年代初期非常老旧和糟糕的扫描仪的情况,简单的 Code39 是一个比较不错的备份选项,可以使用一些免费的 TrueType 字体轻松生成。

一旦您决定使用 Code128,最好知道根据 ISO 15417,该代码有 3 种变体,具体取决于您需要的符号范围。 128A 的控制字符毫无用处,但直接使用 128C 或与 128B 部分适当混合可以提供更紧凑的条码(实际上,与我上面列出的所有其他条码相比,它是最紧凑的条码)。但与此同时,一些非常糟糕的扫描仪可能无法读取混合符号,并要求整个条码为 128C(仅数字对)或 128B(大小写字母和数字)。因此,尝试不同的软件,试用一下并检查结果也很重要。

在那之后唯一剩下要做的就是确保你有一个高对比度(最好是白底黑线,有些扫描仪不会读取反色的条码),保留一个像样的干净免费space 条形码周围的边距,打印适当大小的条形码,并保持所有计算机屏幕、标签和扫描头至少相对干净。