QR 码工作原理:技术深度解析
QR 码(Quick Response,快速响应码)是 1994 年由丰田子公司电装波动(Denso Wave)发明的二维矩阵条形码。QR 码专为高速解码而设计,使用四种标准化编码模式和里德-所罗门(Reed-Solomon)纠错算法,将数据存储在黑白方块(模块)的网格中。与在一维方向编码数据的线性条形码不同,QR 码在水平和垂直两个方向上都包含信息,单个符号最多可实现 7,089 个数字字符。
QR 码的结构剖析
每个 QR 码都由几个功能区组成。了解这些组件有助于你设计可可靠扫描并最大化数据容量的编码。
定位图案(Finder Patterns)
三个相同方形图案,位于左上角、右上角和左下角。每个定位图案由中心的一个 7x7 黑色方块、5x5 白色方块和 3x3 黑色方块组成。这些图案使扫描软件无论编码如何旋转,都能快速检测到 QR 码的位置、方向和角度。
校正图案(Alignment Patterns)
分布在编码中的较小定位标记(通常为 5x5 模块)。校正图案帮助扫描器在校编码印刷在曲面(如产品包装或饮料罐)上时产生的变形。版本 2 及以上的编码至少有一个校正图案;数量随编码尺寸增大而增加。
时序图案(Timing Patterns)
在定位图案之间水平和垂直延伸的交替黑白线条。这些模块定义了数据网格的行和列位置,帮助扫描器确定每个模块的大小。
格式信息(Format Information)
定位图案附近的一个专用区域,编码了纠错级别和掩码图案。扫描器首先读取该区域,以了解如何正确解码其余数据。
数据与纠错区域
其余模块形成两个交错区域:数据码字(编码的有效载荷)和纠错码字(用于损坏恢复的冗余数据)。这些区域按特定比特图案排列,该图案因 QR 码版本而异。
静区(Quiet Zone)
围绕整个 QR 码的强制性清晰边框,至少四个模块宽。没有这个静区,扫描器就无法可靠地将编码与其周围环境区分开。这是自定义设计中扫描失败的最常见原因之一。
数据编码方法
QR 码支持四种不同的编码模式,每种模式针对不同类型的数据进行优化。编码器会根据你的输入自动选择最高效的模式。
数字模式
专门针对数字 0 到 9 进行优化。这是最节省空间的模式,将三位数字压缩为 10 位(而标准二进制中每个字节为 8 位)。版本 40-L 的最大容量:7,089 个字符。非常适合电话号码、产品 ID 和数字编码。
字母数字模式
编码数字(0-9)、大写字母(A-Z)和九个特殊字符:空格、$、%、*、+、-、.、/ 和 :。每对字符被压缩为 11 位。最大容量:4,296 个字符。最适合避免小写字母的 URL 和短文本编码。
字节模式
使用 ISO-8859-1(Latin-1)编码任何 8 位字符。当内容包含小写字母、混合大小写或 UTF-8 字符时,编码器会回退到字节模式。最大容量:2,953 个字符。这是最灵活的模式,涵盖最常见的用例,如完整 URL 和混合文本。
汉字模式
一种针对双字节日文字符(Shift JIS 编码)的专用模式。每个汉字字符被压缩为 13 位,而不是 16 位。最大容量:1,817 个字符。在日本以外使用较少,但展示了该格式的传承。
编码过程分步说明
- 数据分析 — 编码器分析输入内容并选择最高效的模式
- 模式指示符 — 一个 4 位代码指示选择了哪种编码模式
- 字符计数 — 一个比特序列记录数据的长度
- 数据编码 — 使用所选模式将内容转换为比特流
- 终止符 — 一个简短的填充序列标记数据的结束
- 比特填充 — 用交替的 0 和 1 比特填充剩余容量,以达到完整的码字边界
- 纠错生成 — 计算里德-所罗门码字并追加
QR 码版本与尺寸
QR 码跨 40 个版本定义,从版本 1(21x21 模块)到版本 40(177x177 模块)。每个后续版本每边增加 4 个模块。
| 版本 | 尺寸 | 数字容量(L 级) | 典型用途 | |---------|-----------|---------------------|-------------| | 1 | 21x21 | 41 | 简单 URL | | 2 | 25x25 | 77 | 短链接 | | 4 | 33x33 | 187 | vCard、URL | | 6 | 41x33 | 322 | WiFi 配置 | | 10 | 57x57 | 652 | 中等长度文本 | | 20 | 97x97 | 1,746 | 文档 | | 40 | 177x177 | 7,089 | 最大数据 |
大多数面向消费者的 QR 码使用版本 2 到版本 10。更高的版本包含更小的模块,这需要更高分辨率的印刷和更精确的扫描。
里德-所罗门纠错
QR 码采用里德-所罗门纠错,将数据分成块,并为每个块生成冗余码字。有四个级别:
- L 级 — 恢复 7% 的损坏数据。最大数据容量,最小保护。
- M 级 — 恢复 15%。一般用途的标准选择。大多数 QR 生成器默认使用此级别。
- Q 级 — 恢复 25%。为包装商品或经常触摸的物品上的编码提供强力保护。
- H 级 — 恢复 30%。为户外或工业环境提供最大保护。
纠错系统还实现了在 QR 码中嵌入 logo 和图案这一流行做法。被遮挡的模块会从冗余数据中重建,前提是遮挡不超过纠错能力。
扫描如何工作
现代 QR 码扫描涉及一个在毫秒内运行的精密流程:
- 检测 — 相机捕捉图像,软件定位定位图案以确定编码的边界
- 透视校正 — 扫描器应用几何变换,以校正倾斜视角和曲面
- 二值化 — 使用自适应阈值处理将图像转换为纯黑白,以应对多变的光线
- 模块采样 — 扫描器在网格交叉点读取每个模块的颜色
- 格式解码 — 从格式区域提取纠错级别和掩码图案
- 数据提取 — 反向应用掩码,按指定顺序读取数据比特流
- 错误检查 — 里德-所罗门伴随式计算检测并纠正错误
- 解码 — 使用声明的编码模式将干净的比特流转换回原始内容
掩码图案
QR 码在最终渲染前,会对数据区域应用八种掩码图案之一(编号 0 到 7)。掩码确保黑白模块的均衡分布,防止出现会混淆扫描器的大面积空白区域。扫描器从格式信息中读取掩码参考,并在解码过程中反向应用掩码。
Micro QR 码
一种称为 Micro QR 码的变体使用单个定位图案(而不是三个),并提供四个更小的版本。Micro QR 码适用于非常小的空间,如电子元件和医疗设备,最大容量为 355 个数字字符。
自信地生成 QR 码
了解底层技术有助于你创建在任何环境中都能可靠扫描的 QR 码。我们的免费在线 QR 码生成器自动化所有技术决策 — 版本选择、模式优化、纠错和掩码 — 让你在几秒钟内获得生产就绪的编码。可从 URL、文本、vCard、WiFi 等格式中选择,并提供完整的自定义选项。