当前位置: 首页 > news >正文

admin二维码字符过长导致显示失败问题

控制台报错:
code length overflow. (1660>1056)
at QRCodeModel.createData (qrcode.js:105:54)
是 二维码字符串过长 导致的,根本原因是二维码库当前 version: 20 对应的最大容量不够存放你生成的密文 URL。

  1. 为什么会超出容量
    在你代码中,二维码最终承载的是:
    elText = “https://www.cadifkyy.com/appuser/goPageOut.do?sgData=” + encryptedAES(str);
    其中 encryptedAES(str) 使用 AES CBC PKCS7 加密,生成的 Base64 串本身就比较长。
    AES 加密后字符串体积通常比原始字符串增长 30%~35%,再加上你的 URL 前缀,长度会暴增。
    从错误信息可知:
    ● 二维码当前容量上限:1056 字节
    ● 你实际的字符串长度:1660 字节
    所以直接报错。

  2. 解决方案
    方案1:自动调整二维码版本
    目前你写死了 version: 20:
    var qrcode = new QRCode(document.getElementById(“qrcode”), {
    version: 20,
    width: 200,
    height: 200
    });
    改成 自动选择版本(设置为 0),库会根据数据自动匹配合适的 QR Code 版本,最大支持 40 版本:
    var qrcode = new QRCode(document.getElementById(“qrcode”), {
    version: 0, // 自动计算
    width: 200,
    height: 200
    });
    版本对容量的影响:
    ● Version 20 最大 1056 字节
    ● Version 40 最大 2953 字节
    你现在的 1660 字节,只要调到 40 版本就能承载。

方案2:降低纠错等级(errorCorrectionLevel)
二维码的纠错等级默认为 M 或 H,H 虽然稳定,但容量最小。
可以手动设置为 L,以增加可容纳的数据量:
var qrcode = new QRCode(document.getElementById(“qrcode”), {
version: 0,
width: 200,
height: 200,
correctLevel: QRCode.CorrectLevel.L
});
纠错等级 容量 说明
L 最大 可修复 7% 错误
M 中等 可修复 15% 错误
Q 高 可修复 25% 错误
H 最强 可修复 30% 错误

方案3:优化加密内容,减少字符串长度(推荐)
目前 sgData 直接放完整 AES 加密结果,这会很长。
最佳实践是 二维码只存短码或ID,其他信息放在后端数据库中,扫码后通过短码去还原数据。
改造思路:

  1. 后端生成一条记录,并返回唯一短码,例如 abcdef12;
  2. 二维码内容改为:
    https://www.cadifkyy.com/appuser/goPageOut.do?code=abcdef12
  3. 前端扫描后,后端通过 code 查询实际数据,执行后续逻辑。
    这样二维码长度可以压缩到 几十字节以内,永远不会溢出。

方案4:确认 AES 输出为 URL Safe Base64
AES 输出如果含有 +、/、= 这类符号,Base64 在 URL 中会变长,还需要 URL 编码一次,体积进一步增加。
如果后端能支持,可以考虑 URL Safe Base64,替换字符,减少编码膨胀。

  1. 最小修改示例
    如果你只是想先让它工作,可以直接这样改:
    var qrcode = new QRCode(document.getElementById(“qrcode”), {
    version: 0, // 自动选择二维码版本
    width: 200,
    height: 200,
    correctLevel: QRCode.CorrectLevel.L // 降低纠错等级
    });

  2. 调试方法
    在生成二维码前打印最终字符串长度:
    console.log(“二维码内容长度:”, elText.length);
    二维码能否正常生成可参考以下大致阈值:
    版本号 L 级可承载字节数
    20 1056
    30 1748
    40 (最大) 2953
    如果长度仍然超过 2953 字节,就必须执行 方案3,缩短内容。

总结
● 你的数据量超出了版本 20 的上限;
● 最直接的方法:version: 0 并降低纠错等级;
● 根本解决:二维码只存短码或ID,后端解析,避免存放冗长的加密数据。

http://www.dtcms.com/a/508478.html

相关文章:

  • 监控主要的噪音有哪些,怎么系统的降噪?怎么设置告警规则更合理化
  • 温州企业建站系统模板工程招标信息网
  • 代刷网站是怎么做的保定公司做网站
  • vs2017 如何做网站注册一个软件需要多少钱
  • php网站开发做什么图标不显示wordpress
  • 200道高频Java 面试题汇总(含答案解析)
  • Telink 时钟模块
  • 阿尔茨海默病早期症状影像分类数据集
  • 网站首页的快照更新慢如何服务器ip地址做网站
  • 计算机网站开发参考文献绥德网站建设设计
  • Android 多语言切换最佳实践:从原理到封装与优化
  • 深圳微网站搭建爱站网络科技有限公司
  • 东莞网站设计公司建网站科技公司
  • 网站提供入口开发公司一季度汇报
  • 伤寒杂病论
  • 性能测试 | 性能测试工具Jmeter的认识和基础使用
  • 网站建设实现后台数据导出excel如何用asp编写网站后台
  • 宿迁哪家做网站好做学校教务处网站
  • PS插件大全:人像修图/调色特效/字体管理/抠图合成超全工具包,设计师效率直接拉满
  • 外卡收单那点事儿之Visa篇(10)
  • 有个做图片mv的网站56wordpress博客排行
  • 企业网上年检在网站怎么做做装修哪个网站推广好
  • STM32F103C8T6--深入GPIO
  • 国家级!悬镜安全入选两项“网络安全国家标准应用实践案例”
  • 影视网站建设策划文案万源网站建设
  • Java集合操作实战:List工人管理
  • C#高级:数据库中使用SQL作分组处理4(LAG() 偏移函数)
  • 福州手游网站建设c2c电商平台有哪几个
  • 做pvc卡片的交流网站wordpress移除头部无用
  • 怎么搭建一个自己的网站洛阳做公司网站