2015-01-15 127 views
1

我正在寻找正确的解决方案来解码9条码格式的代码3。我在wikipedia上发现的内容如下:如何正确解码代码39

每个字符由九个元素组成:五个小节和四个空格。每个字符中的九个元素中的三个宽(二进制值1),六个元素较窄(二进制值0)。 - Wikipedia

我的问题如下:

  1. 通过 “元素” 这是否意味着一个吧?
  2. 一个Code 39数字的二进制输出是否有9或12个二进制数字?

我的假设如下:

  1. 没有一个校验位
  2. 我们面对的不是全ASCII码39

比方说,我们有以下条码:

enter image description here

让我们专注于开始字符*。我能想到的三种不同的方法可能这种性格解码为二进制:

  1. 假设一个黑条是1和白条是0
    • 1001 0110 1101 – 12位
  2. 假设细线是0,粗线是1
    • 0100 1010 1 – 9位
  3. 假设本细线是0粗线是11
    • 0110 0110 1101 – 12比特

哪个解码方法是正确的吗?如果他们都不是,那么请让我知道正确的方法是什么。

回答

0

没有一个。

代码3为9,代码本身由9个“元素”组成 - 五个条和四个空格加上作为字符间隙的额外空间。酒吧或空间“元素”可能狭窄或宽阔; 3是宽的,6是窄的。“第十”元素(字符间空间)总是窄(IIRC)。代码交替bar-space-bar-space ...并且编码例如是nWWnnWnnnN。将其转换为二进制,并且您有一个9位数字(忽略字符间空间N),它与ASCII无关。然后这些数字中的每一个都被阅读器映射到ASCII。

一些模式被保留用于方位信息,以便正确的结果可以当条形码读“倒置”来确定,否则串读会出现乱码,因为以前的字符串nWWnnWnnnN会被解读为NnnnWnnWWn这是一个完全不同的性格。

有一个Mod-43校验位是可选的。

+0

那么9位二进制序列会是什么?如果通过串行从设备发出条形码格式,则必须发送一系列高电压和低电压(二进制)。继续思考我的问题,代码39中编码的'*'的正确**二进制表示**是什么? – djthoms

+0

'*'表示代码开始/结束序列(用于方向)。实际上编码在数据中的“*”会产生不同的元素序列。代码000000111 000001110 000001101 ... 111000000通过阅读器的固件映射为ASCII字符,并显示为ASCII输出 - 或理论上EBCDIC或您喜欢的任何其他代码。理论上可以将代码输出为“代码39” - 直接进行读取,但对于某些奇怪的问题,人们似乎更喜欢处理ASCII。 – Magoo

1

我使用16位来表示'9元素'代码39字符。例如,星号('*')在我的软件中看起来像这个'1000101110111010'。按元素划分,它们表示酒吧和空间,交替。假设宽条和窄条比例对于条和空格都是2:1,您可能会发现读码困难。

+0

你用什么软件将其解码为二进制文件? – djthoms

+0

我开发的软件将条形码打印到网页上,所以我只是使用手动派生的查找表: –

+0

查找表在这里找到:http://notionovus.com/blog/code-39-barcode-biscuits/#setup –