QR 码图案中隐藏的技术
QR 码 (Quick Response Code,快速响应码) 是 1994 年由原昌宏开发的二维条码。他当时任职于电装 (DENSO) 的一个部门,该部门后来分立为如今的电装 Wave (DENSO WAVE)。最初为汽车零部件库存管理而设计,随着智能手机的普及,QR 码已在支付、URL 分享、门票、名片交换等日常场景中无处不在。
那些黑白图案看似随机,实际上有着精密设计的结构。
QR 码的结构 - 三个地标
QR 码最显著的特征是三个角落的大方形图案 (定位图案)。
- 定位图案:位于左上、右上和左下角。这些地标使摄像头能够瞬间检测 QR 码的位置、方向和倾斜度。从任何角度都能读取,因为这三个点建立了坐标系
- 校正图案:较大的 QR 码中添加的小方块,用于畸变校正
- 定时图案:连接定位图案的黑白交替线条。用于精确定位模块 (点) 坐标的参考线
- 格式信息:记录纠错级别和掩码图案的区域
- 数据区域:存储实际数据的区域
第四个角 (右下) 没有定位图案,因为三个点就足以确定位置和方向,第四个角用作数据区域更为高效。
纠错 - 脏码也能读取的秘密
QR 码最大的特点之一是强大的纠错能力。使用 Reed-Solomon 码,即使 QR 码部分脏污或损坏也能恢复数据。
- L 级 (低):约 7% 损坏可恢复
- M 级 (中):约 15% 损坏可恢复
- Q 级 (四分之一):约 25% 损坏可恢复
- H 级 (高):约 30% 损坏可恢复
在 QR 码中央放置公司 Logo 后仍能扫描,正是得益于这种纠错能力。被 Logo 遮挡的数据通过纠错码恢复。但 H 级的 30% 指的是“丢失后仍可恢复的码字比例”,并不意味着可以遮挡图案总面积的 30%。叠加 Logo 时应选择 H 级,并在面积上留出余量,再用实际的读取设备验证。
QR 码的安全风险
QR 码虽然方便,但也存在安全风险。
QR 码钓鱼 (Quishing)
在 QR 码中嵌入恶意 URL,将用户重定向到钓鱼网站的攻击。由于人类无法目视验证 QR 码内容,与直接输入 URL 相比,钓鱼更难被发现。
- 在合法 QR 码上粘贴假 QR 码的物理攻击
- 通过电子邮件或社交媒体发送假 QR 码的攻击
- 替换公共场所 QR 码的攻击
调换 QR 码这种手法,在"把恶意内容混入正规的分发路径"这一点上,与软件的供应链攻击有着共通的结构。
防范措施
QR 码的容量
QR 码能存储的数据量因版本 (大小) 和纠错级别而异。最大版本 40 (177x177 模块)、纠错级别 L 时:
- 纯数字:最多 7,089 个字符
- 字母数字:最多 4,296 个字符
- 二进制:最多 2,953 字节
- 汉字:最多 1,817 个字符
反映了 QR 码的日本起源,汉字 (Shift_JIS) 的高效编码模式被作为标准内置。
为什么叫"Quick Response"?
QR 码中的"QR"代表 Quick Response (快速响应)。开发者原昌宏需要在工厂生产线上高速扫描零部件,因此设计了一种比传统一维条码读取更快的二维码。定位图案的布局经过优化,可以从任何角度瞬间检测位置。
电装 Wave 持有 QR 码的专利,但宣布不行使专利权,允许任何人免费生成和使用 QR 码。这种"开放"策略是 QR 码在全球普及的重要推动力。
总结
QR 码诞生于日本的汽车工厂,如今已渗透到全球的日常生活中。通过三个定位图案实现高速检测、使用 Reed-Solomon 码实现强大纠错、标准支持汉字编码,那些黑白图案背后蕴含着精心设计的理念。
相关术语
常见问题
二维码的3个方块是做什么用的?
称为定位图案,是相机瞬间检测二维码位置、方向和倾斜度的标记。3个点可以确定坐标系,因此从任何角度都能读取。
二维码加了Logo为什么还能扫描?
因为有里德-所罗门纠错码功能,最多可恢复30%(H级)的损坏。被Logo遮挡部分的数据通过纠错码恢复。
二维码是日本发明的技术吗?
是的。1994年由原昌宏先生为汽车零部件库存管理而开发。他当时任职于电装的一个部门,该部门后来分立为如今的电装Wave。已声明不行使专利权,任何人都可以免费使用。