简单来说:微信识别EAN_13的时候如果遇到0开头的会直接省略0后返回UPC-A格式的12位结果.
在条码识别中,UPC-A 和 EAN-13 本质上是可以互换的,但它们的“位数”定义不同。
1. 为什么 0 消失了?
从识别结果来看,EAN_13 : 0452425822666的结果 scanType 是 UPC_A。
- UPC-A 码:是北美标准,长度固定为 12位。
- EAN-13 码:是国际标准(包括中国),长度固定为 13位。
当你扫描一个以 0 开头的 13 位 EAN 码时,扫码引擎识别出它符合 UPC-A 标准。由于 UPC-A 只有 12 位,它会自动去掉最前面的补位符 0。
2. 核心原因剖析
- 兼容性设计:历史上,为了让北美系统兼容国际 EAN 码,所有 EAN-13 码如果以
0开头,其后 12 位就完全等同于一个UPC-A码。 - 微信扫码漏洞:微信的
wx.scanCode接口在识别时,如果条码同时符合两种标准,有时会优先返回更具体的UPC_A类型,并按照该协议截断前导零。
问题就是为什么我给出的是一个13位的EAN_13国际标准码 微信的扫码接口要按照12位来返回结果?

2:扫码返回的结果和条码类型不一致
3:全网未找到任何关于此bug的