← 返回博客

二维码 / 条形码 / 数字安全

二维码的工作原理:结构、扫描、可靠性与安全性

PetexSpace

二维码不是指向其他地方存储信息的图片。黑色和浅色模块编码了载荷本身,以及帮助扫描器定位、解读和恢复符号的信息。载荷通常是网址,但也可以表示文本、联系方式、Wi-Fi 设置或其他扫描应用能理解的数据。

二维码由DENSO WAVE开发,并作为ISO/IEC 18004在国际上标准化。常见的Model 2格式有40个版本。版本1包含一个21×21的模块网格。每增加一个版本,每边增加四个模块,到版本40时达到177×177。

你可以看到的部分

  • 定位图案:三个大的嵌套方块帮助扫描器定位二维码并确定其方向。
  • 分隔区和空白区域:浅色空间防止定位图案和整个符号与附近内容混合。
  • 时序图案:交替模块帮助扫描器建立网格间距。
  • 对齐图案:额外的目标帮助在较大版本中校正透视和畸变。
  • 格式和版本信息:保留模块描述解码所需的纠错和掩码详细信息。
  • 数据和纠错模块:其余的结构化路径存储编码的有效负载和恢复信息。
QR Code anatomy showing three finder patterns, timing modules, data area, and quiet zone
The large corner squares locate the symbol. The surrounding quiet zone keeps nearby graphics from confusing the scanner.

扫描器如何读取符号

  1. 相机捕捉图像并寻找高对比度的角点图案。
  2. 扫描器估算方向、透视、模块大小和网格边界。
  3. 它对明暗模块进行采样,然后读取格式和版本信息。
  4. 掩码被反转,并按指定顺序重建码字。
  5. 纠错尝试恢复损坏或无法读取的码字。
  6. 数据段被解码为文本或供应用程序解释的其他有效负载。

扫描仪更需要几何形状的清晰,而不是视觉装饰。对二维码图像进行平滑缩放可能会模糊模块边缘。拉伸它会把正方形变成矩形。在模块上放置徽标、文字或图案会移除数据,并迫使错误纠正来补偿。在理想光线下,一个设计可能在一部手机上可以扫描,而在另一台设备、打印尺寸、角度或表面上却无法扫描。

错误纠正很有用,但不是魔法

二维码提供四个标准纠错级别:L、M、Q 和 H。DENSO WAVE 描述了总码字约 7%、15%、25% 和 30% 的恢复水平。较高的纠错会使用更多空间,这可能会使符号更密集,或者在相同信息量下需要更大的版本。

这些百分比并不意味着可以在任意位置覆盖相同的比例。对定位图案的损坏、严重模糊、低对比度、扭曲或缺失安静区都可能导致扫描器完全无法定位二维码网格。恢复效果还取决于损坏的分布情况。请测试最终打印或显示的结果,而不仅仅是原始文件。

二维码变大或变密的原因

容量取决于版本、纠错级别和数据模式。数字数据可以比任意字节更紧凑地编码。一个短网址通常比充满跟踪参数的长网址生成更简单的符号。增加更多数据或选择更强的纠错可能会将二维码提升到具有更多模块的更大版本。

DENSO WAVE列出了Model 2第40版在最低纠错级别下的理论最大数字字符数为7,089个。对于手机扫描来说,这个限制并不是实际目标。一个紧凑的有效载荷、适当的物理模块大小、高对比度和四模块的安静区通常比最大化容量更有用。

如何创建可靠的二维码

  1. 使用你可控制的最短准确有效载荷。在不需要时去掉不必要的跟踪参数。
  2. 将暗模块置于明亮、简单的背景上,并保持强烈对比。
  3. 在标准二维码周围保留至少四个模块宽的安静区。
  4. 使用最近邻或矢量输出进行调整大小,以保持模块边缘方正清晰。
  5. 不要拉伸符号或在结构图案上覆盖图形。
  6. 在最终显示或打印尺寸下,用多种设备、距离、角度和光照条件进行测试。

你可以使用 PetexSpace二维码生成器 生成常见负载,然后使用 二维码阅读器验证结果。读取自己导出的文件可以在代码分享之前发现截断、格式和扫描问题。

Phone decoding a QR Code and inspecting its destination before opening it
Scanning reveals a payload. It does not prove that the destination is safe, so inspect the result before continuing.

扫描是数据,而不是信任信号

二维码可以让目的地对普通观察者隐藏。在打开解码后的链接之前,请检查域名,并注意拼写错误、意外的子域名或与标志或信息承诺的不同目的地。当二维码要求提供凭证、付款、安装应用程序、设备权限或紧急操作时要小心。

  • 优先使用内置相机预览或在打开之前显示解码目的地的阅读器。
  • 不要因为周围的标志看起来专业就相信打印的二维码。贴纸可能覆盖原始二维码。
  • 如果目标要求您登录,请在实际可行时独立打开已知服务。
  • 对下载的文件和配置提示,应像对待通过电子邮件或消息收到的链接一样谨慎。

核心思想

三个角的图案帮助扫描器找到网格。其余的结构告诉扫描器如何读取和修复有效载荷。可靠的二维码保持几何形状、对比度、模块大小和空白区。安全扫描增加了一步:在信任扫描结果引导的内容之前,先检查解码内容。

主要参考文献

DENSO WAVE:二维码的特性和结构DENSO WAVE:错误纠正DENSO WAVE:所需空白区