【问题标题】:How to properly decode code 39如何正确解码代码 39
【发布时间】:2015-01-15 19:11:09
【问题描述】:

我正在寻找正确的解决方案来解码 Code 3 of 9 条形码格式。我在维基百科上找到的内容如下:

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

我的问题如下:

  1. “元素”是指一个小节吗?
  2. 一个Code 39位的二进制输出是9位还是12位?

我的假设如下:

  1. 没有校验位
  2. 我们处理的不是完整的 ASCII 码 39

假设我们有以下条形码:

让我们关注起始字符*。我可以想到三种不同的方法来潜在地将这个字符解码为二进制:

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

哪种解码方法是正确的?如果都不是,请告诉我正确的方法是什么。

【问题讨论】:

    标签: barcode decode code39


    【解决方案1】:

    我使用 16 位来表示“9 元素”代码 39 字符。例如,在我的软件中,星号 ('*') 看起来像这样的 '1000101110111010'。就元素而言,它们的意思是条形和空格,交替出现。假设条形和空格的宽窄比均为 2:1,您可能会难以阅读代码。

    【讨论】:

    【解决方案2】:

    没有。

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

    有些模式是为方向信息保留的,这样如果条形码被“颠倒”读取,就可以确定正确的结果,否则读取的字符串会出现乱码,因为之前的字符串nWWnnWnnnN会被读取为NnnnWnnWWn这是一个完全不同的角色。

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

    【讨论】:

    • 那么 9 位二进制序列是什么?如果您通过串行方式从设备发送条形码格式,则必须发送一系列高电压和低电压(二进制)。继续思考我的问题,以 Code 39 编码的* 的正确二进制表示是什么?
    • * 表示代码开始/结束序列(用于方向)。实际编码在数据中的* 将产生不同的元素序列。代码 000000111 000001110 000001101 ... 111000000 由阅读器的固件映射到 ASCII 字符,并以 ASCII 输出 - 或者理论上 EBCDIC 或您喜欢的任何其他代码。理论上可以将代码输出为“代码 39” - 直接读取,但出于某些奇怪的原因,人们似乎更喜欢处理 ASCII。
    猜你喜欢
    • 1970-01-01
    • 2011-10-06
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多