Qraft

编码与解码

编码是按某种规则把数据转换成另一种形式的处理,解码则是它的逆运算、把原始数据还原出来。字符编码(UTF-8)、图像压缩(JPEG)、加密(AES),数字技术的各个环节都在使用这一对操作,二维码也不例外。

二维码的生成就是编码本身。它把输入数据(链接、文本、联系人信息等),经过选择编码模式 → 转换为比特串 → 附加纠错码 → 应用掩码图案 → 排布模块这一连串步骤,变成黑白的符号。用手机相机扫描二维码则是解码,图像识别 → 提取模块 → 解除掩码 → 纠错 → 从比特串还原数据,这套逆序处理在一瞬间内完成,快到用户感觉不到中间有这么多步。

二维码有 4 种编码模式,会根据数据种类自动选出最省空间的一种。只有数字时用数字模式(每个字符约 3.3 比特),字母与数字用字母数字模式(约 5.5 比特),日文用汉字模式(13 比特),其余情况用字节模式(8 比特)。同一份数据换个模式,二维码的尺寸就会变,所以编码器的优化直接决定了这个码最终能做到多小、能印在多小的包装上。

支撑解码稳健性的,是基于里德-所罗门码的纠错。即使污损、褶皱或破损让一部分模块读不出来,也能从冗余数据把原始比特串完整复原回来。这套设计的实质是:在编码时付出附加「多余」数据、让码变大一些的代价,换取解码时在真实环境下的可靠性。