alsey / wxbarcode

微信小程序条码、二维码生成模块

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

barcode的最后一位是"_"

zhangyucha0 opened this issue · comments

有个BUG。条形码的长度是单数并且最后一位是数字的时候,生成的条形码图扫出来显示最后一位是"_"

commented

我也遇到了这个问题

确实是有这个BUG,有解决办法吗,请告知,谢谢

commented

Barcode使用的是Code 128的编码方式,由于其中包含一部分的校验位,如果能正常读取出来,理论上应该是没问题的。

能否提供有问题的数字序列并告知读取软件,我尝试再现一下。

150809000
微信扫没反应,UC浏览器扫的

commented

我知道原因了,是这样的:如果是纯数字,我使用的是Code 128C方式编码,这样做的好处是可以压缩二维码的长度。但是根据Code 128C的规范,要求数字位数必须是偶数位。一般的做法是在数字前补0

如果想不使用Code 128C方式编码,也可以使用Code 128ACode 128B方式编码,这样就没有偶数位的要求了,但二维码的长度会比Code 128C长一倍(不算头尾)。

因为微信和支付宝都使用的是Code 128C的方式编码,所以我就不修改源代码了。但为了适应你的要求,可以按如下方式打补丁。

barcode.js这个文件中,在perhapsCodeC这个函数前面,添加判断数字位数的代码。即,如果为奇数位,就不做Code 128C的判断。

function perhapsCodeC(bytes, codeset) {
    if (bytes.length % 2 == 1) {
        return codeset;
    }
    for (var i = 0; i < bytes.length; i++) {
    ...

感谢🙏,确实如此

谢谢~

我知道原因了,是这样的:如果是纯数字,我使用的是Code 128C方式编码,这样做的好处是可以压缩二维码的长度。但是根据Code 128C的规范,要求数字位数必须是偶数位。一般的做法是在数字前补0

如果想不使用Code 128C方式编码,也可以使用Code 128ACode 128B方式编码,这样就没有偶数位的要求了,但二维码的长度会比Code 128C长一倍(不算头尾)。

因为微信和支付宝都使用的是Code 128C的方式编码,所以我就不修改源代码了。但为了适应你的要求,可以按如下方式打补丁。

barcode.js这个文件中,在perhapsCodeC这个函数前面,添加判断数字位数的代码。即,如果为奇数位,就不做Code 128C的判断。

function perhapsCodeC(bytes, codeset) {
    if (bytes.length % 2 == 1) {
        return codeset;
    }
    for (var i = 0; i < bytes.length; i++) {
    ...

如果这样的话,生成的条码就扫不出来了,2018110200013