data bits cannot fit in the QR Code..纠错等级(续)

26 阅读2分钟

​ 在往下一级修改纠错等级后(L-->M),发现部分数据又会重现打印二维码不现实问题,对代码进行多次的debug和数据分析后,结果如下图所示:

image-20231225093931702

对所有出错单号进行debug后,正在尝试编码的数据位(data bits)超过了当前选择的二维码版本和纠错等级所能容纳的最大容量,而数据位只会存在648和696两个位数,通过分析随箱卡号来分析数据位数没有任何关联性,eg:1-8正常,尾号9-34就打印不显示

一般来说,二维码的结构包括以下几个部分:

  1. 寻找图案(Finder patterns):位于二维码的三个角落,用于帮助解码器定位和定向二维码。
  2. 定位图案(Timing patterns):一条从顶部左角到右角、另一条从底部左角到右角的交替黑白色块序列,用于确定模块大小和对齐。
  3. 格式信息(Format information):包含版本信息和纠错级别,用于辅助解码过程。
  4. 数据区域(Data region):包含实际的数据内容和纠错码。

image-20231225094852033

原因分析:

zxing解析后的数据位如果"..X..X.."这部分出现在数据区域,并且它的位置与特定的模式指示符、版本信息或纠错级别等不冲突,那么它可能直接对应于你要编码的原始数据的一部分。然而,如果这部分多出来的"..X..X.."导致总位数超过了当前二维码版本和纠错级别的最大容量,那么在尝试编码时可能会出现错误,之前提到的"com.google.zxing.WriterException: data bits cannot fit in the QR Code"。

解决办法:

如果数据解析位按照最大696位数计算的话,那纠错位的最大容量应该大于696所以取纠错等级为Q的704作为QrUtil的最大纠错等级来解决二维码打印部分不现实的问题。