java - 使用 Java 扫描条码后获得额外的字母
问题描述
我创建了一个生成条形码的应用程序。
这是我如何创建条形码的代码:
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
。
这是生成的条形码的屏幕截图:
在这种情况下有什么问题,有人遇到过这个问题吗?请帮我!
解决方案
Code 39 可以选择使用校验位,称为 Code 39 mod 43。
Code 39 mod 43 - 维基百科
比如ZXing的Code39Reader就有一个叫ASSUME_CODE_39_CHECK_DIGIT的选项(即使没有校验位,也会从条码数据生成校验位并通知的模式?)。
类 Code39Reader
public Result decodeRow(int rowNumber, BitArray row, Map<DecodeHintType,?> hints) throws NotFoundException, ChecksumException, FormatException
public static final DecodeHintType ASSUME_CODE_39_CHECK_DIGIT
假设 Code 39 代码使用校验位。不管它映射到什么;使用 Boolean.TRUE。
您的程序是否在生成条形码时添加了校验位(但没有以人类可读的字符打印),或者读取条形码的程序是否补充了校验位并生成/通知了它。可能有两种可能性之一。
顺便说一句,K
当使用 Honeywell Xenon 1900 在默认的无校验字符模式下读取所显示的条码时,会通知最后一个,因此在您的程序中生成条码时可能已添加校验位。会很高。
推荐阅读
- java - 如何在 java 中构造多部分/混合请求体(odata 批处理)
- emacs - 如何从任意文件中获取组织模式文件“标题”和其他文件级属性?
- javascript - 如何避免不必要的类型检查以及来自 API 响应的类型的正确模式或行为?
- java - 当我尝试登录我的 Firebase 应用程序时,我不断收到身份验证被拒绝
- excel - 查找一系列值并返回最大值的公式?
- python - 使用带有 XLSB 文件的 Pandas
- r - 根据管道中的行索引将任何行移动到数据框的底部
- python - dict 理解是否在 Python 中增量评估?
- amazon-web-services - 无法访问 EC2 实例的公有 IP 地址
- postgresql - 将两个表连接在一起并且不保留任何匹配项