js生成的二维码扫码枪读出的跟原字符值不一样

发布时间:2026/7/22 17:50:46
js生成的二维码扫码枪读出的跟原字符值不一样 问题 XcxYY202607201734190a99 这个字符串用 js 的 qrcode.min.js 生成的二维码用微信扫出的结果是一样的但是用扫码枪和扫码盒子扫出的是 XcxYY2607201734190a99居然少中间的 20 两个字符。一、为什么会少 20 变成 260720核心原因扫码设备扫码枪 / 扫码盒开启了日期年份自动压缩 / 两位年份优化功能你的原文XcxYY202607201734190a99中间片段 2026 → 扫码设备内置规则识别为四位公历年份自动裁剪前两位 20解析成两位年份 26解析后字符串XcxYY2607201734190a99正好丢失 20。区分设备行为微信内置扫码纯文本读取不做字符智能解析、不裁剪年份工业扫码枪 / 收银扫码盒默认开启条码智能格式化会自动识别日期、手机号、数字段做精简处理这是硬件固件自带逻辑无法直接关闭时只能改二维码内容格式。补充诱因你的编码片段 20260720 是标准 YYYYMMDD 日期格式几乎所有扫码设备都会命中年份缩写规则。二、有时候XcxYY这些的字符也会变为汉字解决办法1、字母后面加 - 字符就不转换为汉字了2、时间不要用年月日时分秒改成用时间戳的3、字母后面的8数字开头是因为时间戳1开头这个1扫码盒子读不出来4、后面的4位随机字符串必须都是数字否则扫码盒子会读出中文来$outTradeNoXcxYY-8.time().onceNumstr(4);functiononceNumstr($length32,$str){$chars0123456789;for($i0;$i$length;$i){$str.substr($chars,mt_rand(0,strlen($chars)-1),1);}return$str;}