barcode的最后一位是"_"
zhangyucha0 opened this issue · comments
有个BUG。条形码的长度是单数并且最后一位是数字的时候,生成的条形码图扫出来显示最后一位是"_"
我也遇到了这个问题
确实是有这个BUG,有解决办法吗,请告知,谢谢
Barcode使用的是Code 128的编码方式,由于其中包含一部分的校验位,如果能正常读取出来,理论上应该是没问题的。
能否提供有问题的数字序列并告知读取软件,我尝试再现一下。
150809000
微信扫没反应,UC浏览器扫的
我知道原因了,是这样的:如果是纯数字,我使用的是Code 128C
方式编码,这样做的好处是可以压缩二维码的长度。但是根据Code 128C
的规范,要求数字位数必须是偶数位。一般的做法是在数字前补0。
如果想不使用Code 128C
方式编码,也可以使用Code 128A
或Code 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 128A
或Code 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