二维码的工作原理:结构、纠错与容量详解
手机读取二维码时究竟发生了什么?一文看懂定位图案、模块、版本、纠错等级,以及一个二维码到底能存储多少数据。
发布于 阅读约需 6 分钟
二维码无处不在——餐桌上、快递包裹上、火车票上、名片上,还有收款终端上。然而,很少有人知道那些黑白方块里藏着什么,也不明白为什么二维码被 Logo 挡住一部分后依然能扫。本文将用通俗易懂的语言,为你讲解二维码的工作原理。
二维码简史
我们常说的二维码,正式名称是 QR 码(Quick Response Code,意为“快速响应码”),由日本丰田集团旗下 Denso Wave 公司的原昌宏于 1994 年发明。当时,汽车工厂需要一种比一维条形码更快的方式来追踪零部件。传统条形码只能在一个方向上存储数据,容量约 20 个字符;而二维码在水平和垂直两个方向上都能存储数据,可容纳数千个字符。
Denso Wave 为这项技术申请了专利,但选择不行使专利权,该格式也成为了国际标准(ISO/IEC 18004)。正是这种开放性,让任何人都能在任何设备上免费生成和读取二维码。
二维码的结构
每个二维码都是一个正方形网格,由许多被称为模块的小方格组成。每个模块非深即浅,代表一个比特。网格中有些区域承担着固定的任务:
- 定位图案——位于三个角上的大方块。它们让扫描器能瞬间找到二维码并判断其方向,即使二维码是倒置的,或是从斜角拍摄的。
- 校正图案——较小的方块(从版本 2 开始出现)。当二维码印在曲面上或因透视而变形时,它们帮助校正畸变。
- 定时图案——位于定位图案之间、深浅交替的线条。它们告诉扫描器每个模块有多大。
- 格式信息——紧挨着定位图案的条带,记录所用的纠错等级和掩模图案。
- 静区——二维码四周的空白边距。它是规范的一部分:没有它,扫描器就无法分辨二维码在哪里结束、背景从哪里开始。
其余部分都是数据码字和纠错码字,交错分布在整个网格中。
版本:为什么有些二维码更密集
二维码共有 40 种尺寸,称为版本。版本 1 为 21 × 21 个模块;版本每升高一级,每边增加 4 个模块,直到版本 40 的 177 × 177 个模块。编码的数据越多,版本就越高;在相同的打印尺寸下,每个模块也就越小。
这就是为什么短网址生成的图案简洁疏朗,而一大段文字生成的图案却非常密集,需要印得更大。当你用我们的二维码生成器生成二维码时,预览会显示版本和模块数,方便你随时留意密度。
编码模式与容量
二维码会为你的内容自动选择最高效的编码模式:
| 模式 | 字符 | 最大容量(版本 40,L 级) |
|---|---|---|
| 数字 | 0–9 | 7089 个数字 |
| 字母数字 | 0–9、A–Z、空格及 $%*+-./: |
4296 个字符 |
| 字节 | 任意数据,通常为 UTF-8 文本 | 2953 字节 |
| 日本汉字(Kanji) | 日文字符 | 1817 个字符 |
以上都是理论最大值。实际使用中,内容控制在几百个字符以内,扫描才最稳定。(顺带一提:在 UTF-8 编码下,一个汉字通常占 3 个字节,因此字节模式最多只能容纳约 980 个汉字。)如果需要分享更多内容,不如把内容放到网页上,再把网页的短链接编码进二维码。
纠错:Logo 二维码背后的秘密
二维码采用里德-所罗门(Reed–Solomon)纠错码,划伤的 CD 和 DVD 之所以还能继续播放,靠的也是这套数学原理。编码时会额外加入纠错码字,这样即使二维码有一部分受损、弄脏或被遮挡,也能还原出原始数据。纠错共分四个等级:
- L(低)——可恢复约 7% 的受损码字
- M(中)——约 15%
- Q(较高)——约 25%
- H(高)——约 30%
纠错等级越高,二维码越耐用,但也会越大,因为有更多空间要用来存放冗余数据。这正是带 Logo 的二维码得以实现的原因:中间的 Logo 会故意“损坏”二维码的一部分,再由纠错功能来弥补这个缺口。如果要加 Logo,请选择 Q 级或 H 级,并将 Logo 的面积控制在二维码面积的四分之一左右以内。
提示:纠错不能代替良好的对比度。如果二维码颜色太浅、尺寸太小或缺少静区,即使采用 H 级纠错也可能无法识别。
掩模:让图案保持易读
原始数据可能会意外形成大片同色区域,或出现酷似定位图案的形状,从而干扰扫描器。为避免这种情况,编码器会套用 8 种掩模图案之一——也就是翻转特定模块的数学公式——并保留“罚分”最低的那一种。扫描器会从格式信息中读出掩模编号,再将其还原。你完全不必操心掩模,但正是因为它,两个内容几乎相同的二维码看起来可能截然不同。
扫码时发生了什么
当你把摄像头对准二维码时,扫描器会依次:
- 寻找三个定位图案,计算出二维码的位置、大小和旋转角度。
- 校正透视:借助校正图案,把倾斜的二维码还原成平整的网格。
- 采样:以定时图案为标尺,判断每个模块是深色还是浅色。
- 读取格式信息,去除掩模,收集码字。
- 修复:通过里德-所罗门解码纠正错误。
- 解析数据——链接、Wi-Fi 凭据、联系人名片等——并提供相应的操作。
整个过程只需几毫秒。你可以用我们的在线二维码扫描器亲自试一试:它会直接在你的浏览器中,对上传的图片、链接或摄像头画面执行上述步骤。
静态二维码与动态二维码
静态二维码直接包含最终内容:网址、Wi-Fi 密码或文本本身。它永久有效,不需要服务器,也无法被追踪。动态二维码包含的则是服务商提供的一个短跳转链接,你可以之后更改目标地址并统计扫描次数——但一旦订阅到期,二维码就会失效。
QR.tools 生成的所有二维码都是静态的:免费、私密且永久有效。如果日后需要更改目标地址,可以让二维码指向一个由你掌控的页面,之后只需更新那个页面即可。
二维码里能存什么?
二维码存储的其实只是文本,而文本的格式决定了手机会如何处理它。常见的标准格式包括:
- 网址(URL)——打开网站(
https://…) - Wi-Fi——连接网络(
WIFI:T:WPA;S:…;P:…;;)——请使用 Wi-Fi 二维码生成器 - vCard——保存联系人——请使用 vCard 二维码生成器
- 邮件、短信和电话——通过
mailto:、SMSTO:和tel:发起邮件、短信或通话 - 日历日程——通过 iCalendar
VEVENT添加日程 - 地理位置——通过
geo:坐标打开地图
要点回顾
- 二维码是由模块组成的网格,数据周围分布着固定的定位图案、定时图案和校正图案。
- 内容越多,版本越高,图案越密集,最小打印尺寸也越大。
- 纠错(L、M、Q、H)让二维码在受损后依然可用——也让加 Logo 成为可能。
- 静态二维码永久有效且保护隐私;动态二维码可以修改,但依赖服务商。
准备好动手做一个了吗?打开二维码生成器,几秒钟就能做出带有你专属配色和 Logo 的二维码。