如何为UPC条形码分配数字0-9的条形宽度序列?


4

UPC条形码由一系列黑色和白色条组成。条的宽度范围为1到4(1为最薄,4为最厚)。每个数字0到9使用4个条形码进行编码:

Digit | Bar Thickness Sequence
  0   |        3-2-1-1
  1   |        2-2-2-1
  2   |        2-1-2-2
  3   |        1-4-1-1
  4   |        1-1-3-2
  5   |        1-2-3-1
  6   |        1-1-1-4
  7   |        1-3-1-2
  8   |        1-2-1-3
  9   |        3-1-1-2

如何将条宽分配给数字0到9?我注意到每个系列的4个柱子总和为7,但除此之外我没有看到明显的模式?

(注意:UPC条形码编码的数字可以有特殊含义(产品分类,供应商,校验和等)。这个问题仅涉及条形宽度(条形码编码)的推导方式。

以下是我发现的参考资料之一:所有关于UPC条形码和EAN条形码


2
我不知道完整的答案,但它肯定是为了纠正错误/检测。(是的,仍然有检查代码)条形码阅读器必须能够检测它是否已读取整数或部分数字的开头。如果您查看宽度数字,则不应该有一个模式能够向右或向左移动一个条形并仍然生成有效数字。
hazzey

请注意,序列是交替的黑/白,因此移位误差需要为2的移位。实际上有很多例子可以显示,例如,4-6移动两个会给出零(所以我的结论是这样的移位误差不是问题)。
agentp 2016年

Answers:


3

@hazzey走在正确的轨道上。这与格雷码相反,其目的是在编码器的元状态期间避免不良数据。由于条形码是静态的,我们希望最大限度地之间的信号差的所有值,而不仅仅是邻居,我们希望尽量减少总的物理空间- “4”宽度,因此缺乏。

我要指出,目前有许多不同的实现正在使用中。


0

只是一个观察,但首先要注意的是,只有20个1-4的组合添加到7,即使用了一半而一半无效。

任何一位错误(条形读取太宽或太窄)都是一个明显的错误,序列不再求和为7。

一位移位,即条形读取太宽而相邻的空间之一相应太窄,会增加到7并显示有效,但是如果查看选定使用的序列,您会发现每个可能的移位都是这样的结果在未使用的序列中,将被识别为错误。(实施例如果2-1-2-2被读为1-2-2-22-2-1-22-1-3-1那将是一个错误)。

当然,这并没有告诉我们关于如何进行数字映射的特定序列的任何信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.