二维码的工作原理 - 结构与扫描原理详解
什么是二维码
二维码(Quick Response Code)是 1994 年由电装波动公司开发的二维条形码。与传统条形码只能在横向存储数据不同,二维码可在纵横两个方向存储数据,因此能处理数十倍到数百倍的信息量。
正如「Quick Response」之名所示,二维码的设计目的是实现高速读取。如今只需将智能手机摄像头对准即可瞬间解码,广泛应用于 URL 访问、Wi-Fi 连接、电子支付等场景。
解析二维码的结构
二维码看似随机的黑白点阵,实际上由严格定义的区域组成。主要构成要素如下。
- 定位图案:位于左上、右上、左下三个角的大正方形。用于扫描器瞬间检测二维码的位置和倾斜角度。
- 校正图案:版本 2 及以上的二维码中包含的小正方形。用于校正印刷在曲面上时的变形。
- 定时图案:连接定位图案之间的黑白交替线条。作为精确确定单元格坐标的基准线。
- 数据区域:实际数据编码的区域。支持数字、字母数字、二进制和汉字 4 种模式。
- 纠错码:使用里德-所罗门码的冗余数据。即使有污损或破损也能恢复原始数据。
数据编码方式
存储在二维码中的数据会根据内容自动选择最优编码模式。
- 数字模式:仅限 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 级别。
<% if (typeof amazonTag !== "undefined" && amazonTag) { %>&tag=<%= amazonTag %>" target="_blank" rel="nofollow noopener noreferrer" class="amazon-inline-link">QR code technology books<% } else { %>QR code technology books<% } %> are also a great resource for deeper understanding.智能手机如何读取二维码
智能手机摄像头读取二维码的处理过程如下。
- 1. 检测:从摄像头画面中检测定位图案(3 个大正方形),确定二维码的位置、大小和角度。
- 2. 归一化:以校正图案为基准,校正斜角拍摄时的透视变形。
- 3. 采样:以定时图案为基准确定单元格网格,判断每个单元格是黑还是白。
- 4. 解码:从格式信息中读取纠错级别和掩码图案,去除掩码获取数据位流。
- 5. 纠错:通过里德-所罗门码检测并纠正数据中的错误。
- 6. 解释:将解码后的数据转换为 URL、文本、Wi-Fi 设置等格式,执行相应操作。
整个处理过程在数十毫秒内完成,用户对准摄像头的瞬间即可获得结果。
越了解二维码的原理,越能通过设计和放置的优化提高读取率。<% if (typeof amazonTag !== "undefined" && amazonTag) { %> For further reading, &tag=<%= amazonTag %>" target="_blank" rel="nofollow noopener noreferrer" class="amazon-inline-link">related books are a great next step.<% } else { %> Books on barcode technology are a great next step.<% } %>
Related: See also our guide on QR code types comparison.
二维码的实用技巧
理解二维码的原理后,可以更有效地加以利用。以下是实践中有用的要点。
- 控制数据量:使用短链接服务减少字符数,可降低二维码版本,提高读取精度。
- 确保对比度:背景色与前景色对比度低时容易读取失败。白底黑点最为稳定。
- 注意印刷尺寸:名片建议 2cm 见方以上,海报则根据读取距离确保相应尺寸。
- 选择纠错级别:叠加 Logo 用 H 级别,优先数据量用 L 级别,根据用途灵活选择。