Qraft

二维码的工作原理 - 结构与扫描原理详解

什么是二维码

二维码(Quick Response Code)是 1994 年由日本电装(现在的电装 Wave)开发的二维条码。传统的条形码只能沿横向排列数据,而二维码在纵横两个方向上都能放置信息,因此可承载的数据量达到条形码的几十倍甚至几百倍。名称中的「Quick Response」正说明了它的设计目标:以最快的速度被读出来。

今天只要把手机相机对准它,几乎瞬间就能完成解码,用途覆盖打开链接、连接 Wi-Fi、电子支付、门票验证、物流追踪等各个场景。据称全球每天的扫描次数已达数十亿次,说它是社会基础设施的一部分并不夸张。

解析二维码的结构

二维码乍看只是一堆随机的黑白点,实际上每一块区域的职责都由规格(ISO/IEC 18004JIS X 0510)严格定义。主要构成要素如下。

  • 定位图案:位于左上、右上、左下三个角的大方块。扫描端靠它在一瞬间判断出二维码的位置与倾斜方向。
  • 校正图案版本 2 以上的二维码才有的小方块,用于修正印在曲面上时产生的形变。
  • 定时图案:连接各定位图案的黑白交替线条,是精确算出每个模块坐标的基准线。
  • 数据区:真正编入数据的区域,支持数字、英数字、二进制、汉字四种模式。
  • 纠错码:采用里德-所罗门码的冗余数据。即使码面被污损或缺失,也能把原始数据还原出来。

数据编码方式

放进二维码的数据会根据内容自动选用最合适的编码模式。QR 码规格(ISO/IEC 18004)定义了四种编码模式,各自对应的字符种类与压缩效率都不同。

  • 数字模式:只处理 0 至 9 的数字。3 位数字压缩进 10 个比特,效率最高,最多可存 7,089 个字符。适合电话号码、会员编号这类纯数字的数据。
  • 数字模式(Alphanumeric Mode):可处理 0 至 9、A 至 Z(仅大写)、空格以及 $、%、*、+、-、.、/、: 共 45 种字符。2 个字符转换为 11 个比特,最多可存 4,296 个字符。需要注意的是这一模式不能使用小写字母(a 至 z),含小写的链接会自动切换到字节模式。它适合放全大写的短网址或序列号
  • 字节模式:存放 UTF-8 等任意字节序列。链接、日文文本、邮箱地址等超出那 45 种字符范围的数据都走这一模式,最多可存 2,953 字节。
  • 汉字模式:把 Shift_JIS 的汉字以每字 13 个比特高效编码,对含大量汉字与假名的数据有利,最多可存 1,817 个字符。

模式的选择由生成工具自动完成,但只要对字符种类稍加留意,就能把二维码的尺寸压得更小。例如把网址全部写成大写字母,就会套用英数字模式,比字节模式多放约 45% 的字符。

编码后的数据会变成比特串,按规则铺排成码面上的模块(黑白单元格)。数据越多,二维码的版本(尺寸)就越大,从最小的版本 1(21×21 个模块)到最大的版本 40(177×177 个模块)共分 40 级。

纠错机制

二维码最大的特色之一,是强悍的纠错能力。凭借名为里德-所罗门码的数学算法,即使码面的一部分被弄脏或撕破,仍能把原始数据复原。

规格(ISO/IEC 18004)规定了四个纠错级别

  • L(Low):可复原约 7% 的损伤
  • M(Medium):可复原约 15% 的损伤
  • Q(Quartile):可复原约 25% 的损伤
  • H(High):可复原约 30% 的损伤

级别越高,复原能力越强,但相应地会有更多区域被冗余数据占用,能装的信息量随之减少。在中央叠放标志的设计款二维码里,标志覆盖处的数据等于读不到,所以通常会选择级别 H。

智能手机如何读取二维码

手机相机读取二维码的处理,按以下步骤进行。

  • 1. 检测:从相机画面中找出定位图案(三个大方块),确定二维码的位置、尺寸和倾斜角度。
  • 2. 归一化:以校正图案为基准,修正从斜侧拍摄造成的透视变形。
  • 3. 采样:以定时图案为基准算出模块的网格,逐格判定是黑还是白。
  • 4. 解码:从格式信息中读出纠错级别与掩码图案,解除掩码后取得数据比特串。
  • 5. 纠错:用里德-所罗门码检测并纠正数据中的错误。
  • 6. 解释:把解码结果转换成链接、文本、Wi-Fi 设置等格式,并执行对应的动作。

这一连串处理在极短的时间内就能走完,所以用户几乎在举起相机的同一瞬间就拿到了结果。

越了解二维码的原理,越能靠设计和摆放上的用心把读取成功率提上去。

相关文章:二维码的种类比较,欢迎一并阅读。

二维码的实用技巧

理解了原理,用起来就能更有把握。以下是在实际操作中最管用的几点。

  • 压缩数据量:借助短链接服务减少字符数,二维码的版本随之变小,读取精度也跟着提高。
  • 确保对比度:背景色与前景色的对比度不足,扫描就容易失败。白底黑点是最基本的组合。
  • 注意印刷尺寸:名片上至少留 2 厘米见方,海报则要做到扫描距离的十分之一左右。
  • 选对纠错级别:要叠放标志就选级别 H,想优先塞进更多数据则选级别 L,按用途分开使用。