D
开发工具箱

二维码生成详解:QR 码为什么能扫还能纠错

编程转换 2026年6月17日 约 1 分钟阅读

QR 码不只是”黑白方块”

QR(Quick Response)码由日本 Denso Wave 公司的原昌宏于 1994 年发明,最初是为汽车零件追踪设计的。相比传统一维条形码(只能存几十个字符、需直线对准扫描),QR 码能存上千字符、任意角度可扫、还自带纠错——这就是”Quick Response”的由来。

二维码生成器看似只是”输入文字出图片”,但背后是一套精密的编码结构。理解它的结构,你才能用好”版本""纠错等级""容量”这些参数。

QR 码的结构

一个 QR 码由功能区和数据区两部分拼成:

功能图案(定位用)

  • 三个定位图案(Finder Pattern):左上、右上、左下三个大方块(7×7 的”回”字)。这是 QR 码最显眼的特征,让扫描器快速找到码的方向和边界。三个角放定位图案,第四个角不放,是为了让扫描器能判断旋转方向
  • 对齐图案(Alignment Pattern):较大的码(版本 2 以上)中间散布的小方块,用于纠正码面扭曲。版本越高对齐图案越多
  • 定时图案(Timing Pattern):定位图案之间的黑白相间线,提供模块坐标参考
  • 格式信息:记录纠错等级和掩码图案,存在定位图案旁边

数据区

剩下的区域才是真正存数据的地方——黑白模块按编码规则填充,加上纠错码。还有一块安静区(Quiet Zone):码四周至少 4 模块宽的空白边框,帮助扫描器识别边界,生成时千万别裁掉。

编码流程:从文字到方块

把文本变成 QR 码方块要经过几步:

  1. 数据编码:把文本转成二进制位流。QR 支持多种编码模式——数字模式(最省,每 3 位数字用 10 位)、字母数字模式、字节模式(中文等用 UTF-8)、汉字模式。生成器会自动选最优模式,数字比中文省很多空间
  2. 追加纠错码:用 Reed-Solomon 纠错算法给数据加冗余位
  3. 交错与填充:把数据和纠错码按规则交错排列(避免局部损坏导致连续数据丢失),填到目标版本对应的矩阵大小
  4. 掩码(Masking):对数据区做 8 种掩码图案之一异或,避免出现大面积同色块(同色块会干扰扫描器定位)。生成器会评估 8 种掩码选最优的
  5. 放置功能图案与格式信息:完成矩阵

纠错机制:Reed-Solomon

QR 码最聪明的设计是纠错码。即使码面被遮挡、污损、撕裂一部分,仍能完整恢复数据——靠的就是 Reed-Solomon 纠错。

Reed-Solomon 是一种基于伽罗华域的纠错编码,原理是给原始数据附加一组冗余校验位。它的特性是:只要损坏的部分不超过纠错能力上限,就能完整恢复。QR 码定义了四个纠错等级:

等级纠错能力(可恢复数据比例)典型用途
L (Low)~7%码面干净、空间优先
M (Medium)~15%默认,平衡
Q (Quartile)~25%可能有轻度遮挡
H (High)~30%重度遮挡环境(如印在产品上、加 logo)

纠错等级越高,纠错码占的空间越大,能存的实际数据越少。所以”容量”不是固定的——同一版本下,L 级容量最大,H 级最小。

实战意义:如果二维码要中间加 logo、或贴在易磨损的地方,选 H 级——它能容忍中央被 logo 覆盖约 30% 面积仍可扫。如果只是干净网页放个 URL,M 级足够。加 logo 不是免费午餐,必须配套提高纠错等级,否则扫不出来。

版本与容量

QR 码有 40 个版本(Version 1~40),版本越高矩阵越大:

  • 版本 1:21×21 模块
  • 版本 N:(17 + 4N)×(17 + 4N) 模块
  • 版本 40:177×177 模块

版本越大能存越多。最大容量(版本 40、L 级、数字模式)约 7000 个数字或 2900 个汉字。但实际能用多少取决于三个变量:

  1. 数据类型:数字最省、英文次之、中文(字节模式)最费
  2. 纠错等级:越高容量越小
  3. 版本:越大容量越大

生成器通常”按需自动选版本”——你输入数据,它算出能装下的最小版本,保持码面尽量小。所以你不用手动选版本,但要知道数据量太大时码面会变大、变密,扫描难度上升。

容量与可扫性的平衡

很多人犯的错:往 QR 码塞超长 URL(带一堆 UTM 参数),结果码面密密麻麻,手机难扫。解决思路:

  • 用短链:长 URL 先转短链再生成 QR,码面小且易扫
  • 控制数据量:QR 码不是越满越好,密度越高对扫描器要求越高、对污损越敏感
  • 足够分辨率:码面打印尺寸 = 模块数 × 每模块物理尺寸。模块越多需要的最小打印尺寸越大,否则扫描器分辨不清

特殊 QR 内容

QR 码内容不是纯文本时,扫描器会按格式识别执行特殊动作:

  • URLhttps://...):打开浏览器
  • WiFiWIFI:S:名称;T:WPA;P:密码;;):手机提示连接 WiFi
  • vCard:保存为联系人
  • mailto:/tel::发邮件/拨号

生成 WiFi 二维码是实用场景——客人扫码直接连 WiFi,不用输密码。这些格式都是约定俗成的文本协议,QR 码本身只负责存文本,识别动作由扫描 App 完成。

小结

QR 码的核心设计是”定位图案 + 数据编码 + Reed-Solomon 纠错 + 掩码”。定位图案让任意角度可扫,纠错码让部分损坏可恢复,掩码避免同色块干扰。理解版本/容量/纠错等级三者的权衡,你就能正确选择:干净场景用低纠错换大容量,易损场景用高纠错保可读性。要反向从图片识别 QR 码,看 [[qr-decode]]。