【问题标题】:Getting extra letters after scanning the barcode using Java使用 Java 扫描条码后获得额外的字母
【发布时间】:2020-07-09 23:34:20
【问题描述】:

我创建了一个生成条形码的应用程序。

这是我创建条形码的代码:

Code39 code39 = new Code39();
String outputStr = code39.encode("B00009", 1);
//String humanTextStr=code39.getHumanText();
lblBarcode.setText(outputStr);
lblBarcode.setFont(new java.awt.Font("CCode39_S3_Trial",java.awt.Font.PLAIN,14));

使用这个 java 库 ConnectCodeBarcodeFontLibrary.jar

为了扫描条形码,我使用了QRbot 应用程序,它为我提供了这些信息 - 末尾有额外的字母 B00009K 而不是这个 B00009

这是生成的条码截图:

在这种情况下有什么问题,有人遇到过这个问题吗?请帮帮我!

【问题讨论】:

    标签: java barcode barcode-scanner scanning


    【解决方案1】:

    代码 39 可以选择使用校验位,称为代码 39 mod 43。
    Code 39 mod 43 - Wikipedia

    比如ZXing的Code39Reader有一个选项叫ASSUME_CODE_39_CHECK_DIGIT(即使没有校验位,也从条码数据生成校验位并通知的模式?)。
    Class Code39Reader

    public Result decodeRow(int rowNumber,
                            BitArray row,
                            Map<DecodeHintType,?> hints)
                     throws NotFoundException,
                            ChecksumException,
                            FormatException
    

    ASSUME_CODE_39_CHECK_DIGIT

    public static final DecodeHintType ASSUME_CODE_39_CHECK_DIGIT
    假设 Code 39 代码使用校验位。不管它映射到什么;使用 Boolean.TRUE。

    您的程序是否在生成条形码时添加了校验位(但没有以人类可读的字符打印),或者读取条形码的程序是否补充了校验位并生成/通知了它。可能有两种可能性之一。

    顺便说一句,当使用 Honeywell Xenon 1900 在默认无校验字符模式下读取所提供的条码时,会通知最后一个 K,因此在您的程序中生成条码时可能已添加校验位。会很高。

    【讨论】:

    • 你帮了我...!
    【解决方案2】:

    通过遵循@kunifASSUME_CODE_39_CHECK_DIGIT 代码的回答,该代码表示​​它使用校验位。因此,我分析了我的代码,发现code39.encode("B00009", 1); 传递了第二个参数 1,这就是它在条形码编号末尾生成额外字母K 的原因。

    所以,我把 1 改成了 0,现在它可以正确扫描条形码了。

    String outputStr = code39.encode("B00009", 0);
    

    【讨论】:

      猜你喜欢
      • 2018-02-12
      • 1970-01-01
      • 2016-02-16
      • 2017-01-30
      • 2017-10-12
      • 2021-02-25
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多