You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ZXing读取PDF中Code 39条码时如何去除末尾额外控制字符

解决ZXing读取Code39条码末尾多出控制字符的问题

你遇到的末尾控制字符大概率是Code39的校验位(Mod 43)——ZXing默认会把校验位包含在解码结果里;也有可能是开启了Code39扩展模式导致的额外字符。以下是两种解决思路:

一、通过ZXing解码参数直接禁用

在你的解码配置中添加两个关键参数,直接控制ZXing的解码行为:

修改代码中的zxingHints部分:

Map<DecodeHintType, Object> zxingHints = new HashMap<>();
zxingHints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
zxingHints.put(DecodeHintType.POSSIBLE_FORMATS, List.of(BarcodeFormat.CODE_39));
// 禁用Code39校验位返回,避免末尾多出校验字符
zxingHints.put(DecodeHintType.CODE_39_CHECK_DIGIT, Boolean.FALSE);
// 关闭Code39扩展模式(如果不需要识别扩展字符集,可进一步避免异常字符)
zxingHints.put(DecodeHintType.CODE_39_EXTENDED, Boolean.FALSE);

二、手动过滤结果中的控制字符

如果上述参数配置后仍有问题,可以对解码结果做二次清理,过滤掉所有非打印控制字符:

修改返回结果的代码段:

if (StringUtils.isNotBlank(barcodeDecodingResult.getText())) {
    // 过滤非打印控制字符,保留Code39标准可打印字符
    String cleanedText = barcodeDecodingResult.getText().replaceAll("\\p{Cntrl}", "");
    return Optional.of(cleanedText);
}

内容的提问来源于stack exchange,提问作者A M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 20:21:23