二维码的工作原理 - 结构与扫描原理详解
什么是二维码
二维码(Quick Response Code)是 1994 年由电装波动公司开发的二维条形码。与传统条形码只能在横向存储数据不同,二维码可在纵横两个方向存储数据,因此能处理数十倍到数百倍的信息量。
正如「Quick Response」之名所示,二维码的设计目的是实现高速读取。如今只需将智能手机摄像头对准即可瞬间解码,广泛应用于 URL 访问、Wi-Fi 连接、电子支付等场景。
解析二维码的结构
二维码看似随机的黑白点阵,实际上由严格定义的区域组成。主要构成要素如下。
数据编码方式
存储在二维码中的数据会根据内容自动选择最优编码模式。
- 数字模式:仅限 0-9 的数字。将 3 位数字压缩为 10 位,效率最高。最多可存储 7,089 个字符。
- 字母数字模式:包含 0-9、A-Z、空格及部分符号共 45 种字符。将 2 个字符转换为 11 位。
- 字节模式:存储 UTF-8 等任意字节序列。URL 和日文文本通常使用此模式。
- 汉字模式:以每字符 13 位高效编码 Shift_JIS 汉字。
编码后的数据转换为位流,作为二维码的单元格(黑白点)排列。数据量越大,二维码的版本(尺寸)越大,从最小的版本 1(21×21 单元格)到最大的版本 40(177×177 单元格)共 40 个级别。
纠错机制
二维码的一大特点是强大的纠错功能。通过名为里德-所罗门码的数学算法,即使二维码部分被污损或破损,也能恢复原始数据。
纠错分为 4 个级别。
- L(低):可恢复约 7% 的损伤
- M(中):可恢复约 15% 的损伤
- Q(四分之一):可恢复约 25% 的损伤
- H(高):可恢复约 30% 的损伤
纠错级别越高恢复能力越强,但相应地数据区域会被冗余数据占用,可存储的信息量减少。在中央叠加 Logo 的设计二维码中,由于 Logo 部分的数据无法读取,通常选择 H 级别。
智能手机如何读取二维码
智能手机摄像头读取二维码的处理过程如下。
- 1. 检测:从摄像头画面中检测定位图案(3 个大正方形),确定二维码的位置、大小和角度。
- 2. 归一化:以校正图案为基准,校正斜角拍摄时的透视变形。
- 3. 采样:以定时图案为基准确定单元格网格,判断每个单元格是黑还是白。
- 4. 解码:从格式信息中读取纠错级别和掩码图案,去除掩码获取数据位流。
- 5. 纠错:通过里德-所罗门码检测并纠正数据中的错误。
- 6. 解释:将解码后的数据转换为 URL、文本、Wi-Fi 设置等格式,执行相应操作。
整个处理过程在数十毫秒内完成,用户对准摄像头的瞬间即可获得结果。
越了解二维码的原理,越能通过设计和放置的优化提高读取率。
Related: See also our guide on QR code types comparison.
二维码的实用技巧
理解二维码的原理后,可以更有效地加以利用。以下是实践中有用的要点。