# 二维码知识

二维条码是在一维条码基础上扩展出来的条码形式，用黑白矩形图案表示二进制数据，设备扫描后可以读取其中包含的信息。一维条码主要通过宽度记录数据，长度方向不记录数据；二维条码在横向和纵向两个方向上都记录数据，因此可以保存更多信息。二维条码还具备一维条码没有的定位点和容错机制：定位点帮助设备识别方向和位置；容错机制让二维码在没有完整识别、或图案有轻微污损时，仍有机会还原出原始信息。二维码种类很多，不同机构开发出的二维码，在结构、编码方法和读取方法上会有所不同。

## 二维码的常见类型

### 堆叠式 / 行排式二维条码

堆叠式二维条码也叫行排式二维条码，可以理解为把多行一维条码叠在一起。常见类型包括 Code 16K、Code 49、PDF417 等。

![堆叠式二维条码示例](images/qr-code-knowledge/stacked-2d-barcode-example.jpg)图片说明：图片内容

这类码通常更适合特定行业和专用设备读取，在普通手机扫码场景中不如 QR 码常见。

### 矩阵式二维码

矩阵式二维码由黑白模块组成，信息分布在整个二维平面中。日常生活中最常见的是 QR 码，也就是通常所说的“二维码”。

相对于一维条码，QR 码的数据容量更大，可以混合保存数字、字符和中文文本；同时具备一定容错能力，部分图案损坏后仍可能被识别。QR 码空间利用率高，手机、平板、摄像头等设备对它的支持也更普遍。

## 常用二维码对比

- QR（日）：发明时间 1994 年；是否中国国家标准 是；是否国际标准 是；最小面积 21×21 mm×mm；最大面积 177×177 mm×mm；信息存储量 大；字节 / 平方英寸 2953（7% 纠错信息）；数字 4296；字符 7089；汉字 1817；二进制 2953；纠错分级 4 级；最高纠错信息 30%；最低纠错信息 7%；表示中文 优；解码速度 快；抗畸变、污损能力 较弱；识别方向性 全方向性；识别设备 支持手机、PAD、摄像头
- PDF417（美）：发明时间 1992 年；是否中国国家标准 是；是否国际标准 是；最小面积 90×9 mm×mm；最大面积 853×270 mm×mm；信息存储量 最小；字节 / 平方英寸 1106（0.2% 纠错信息）；数字 2710；字符 1850；纠错分级 9 级；最高纠错信息 46.20%；最低纠错信息 0.20%；表示中文 差；解码速度 慢；抗畸变、污损能力 一般；识别方向性 单方向；识别设备 限专用设备
- DM（美）：发明时间 1989 年；是否中国国家标准 否；是否国际标准 是；最小面积 10×10 mm×mm；最大面积 144×144 mm×mm；信息存储量 小；字节 / 平方英寸 1556（14% 纠错信息）；数字 3116；字符 235；纠错分级 非离散分级；最高纠错信息 25%；最低纠错信息 14%；表示中文 一般；解码速度 一般；抗畸变、污损能力 超强；识别方向性 单方向；识别设备 支持手机、PAD、摄像头
- 汉信码（中）：发明时间 2005 年；是否中国国家标准 是；是否国际标准 是；最小面积 有 84 个版本供自主选择，最小码约指甲大小 mm×mm；最大面积 —；信息存储量 大；字节 / 平方英寸 4350；数字 7829；字符 4350；汉字 2174；二进制 3262；纠错分级 4 级；最高纠错信息 30%；最低纠错信息 8%；表示中文 优；解码速度 快；抗畸变、污损能力 强；识别方向性 全方向性；识别设备 限专用设备

## 活码的原理

活码可以理解为二维码的一种应用形态。它通过短网址指向保存在云端的信息：扫码时，手机先访问短网址，再打开对应的云端内容页。制作者在后台修改云端内容时，二维码图案不变，扫码者看到的内容会更新。

和直接把文字或网址写进二维码的静态码相比，活码的图案通常更简洁，也更适合印刷和扫描。它让二维码的印刷管理更方便：可以先印刷二维码图案，后设置码内容；也可以在二维码已经贴出、印出或转发后，继续修改后台内容。

活码的核心特点包括：

- 图案不变，内容可改：印刷后无需换码，后台可随时更新内容。
- 支持多种内容：可展示图文、音视频、文件、链接和表单等。
- 可统计扫码数据：可查看扫码次数、时间、地点和设备等信息。
- 需要联网访问：扫码枪通常只能读取活码中的短网址。

从理论上说，活码背后的云端内容不再受二维码图案容量直接限制，文本、图片、文件等内容都可以放在云端页面中。草料也没有对文本字数做硬性限制。但实际使用时，仍会受到网络带宽、服务器性能、手机端加载能力等影响。如果输入过多文字、上传过大的图片或文件，可能影响生成和扫码打开速度，甚至导致手机端显示不完整。

因此，活码不是内容越多越好。正式投放前，建议先用手机扫码测试页面打开速度和展示效果，确认扫码者能正常查看。

这项技术原理简单，但很实用。现在很多软件和应用都可以创建这类二维码，草料二维码并不是这项技术的发明者。不过，不少企业和个人真要稳定用好它，仍然有门槛：如果自己开发一套系统，需要处理页面编辑、内容存储、扫码访问、数据统计、后台管理和服务器运维，成本和时间不是所有企业都能接受。

草料二维码为活码提供云服务，让更多人只需注册登录，就能使用这项能力。你不需要找人设计网页、编写代码，也可以通过二维码内容编辑器创建和修改自己的二维码内容；管理后台可以集中管理已创建的二维码，查看投放后的扫码数据或收集到的反馈信息。网页内容存放在云端，也能减少企业自建基础设施和开发维护成本。

## 用相同内容生成的二维码为什么图案不同

二维码是用特定几何图形按一定规律在平面上分布，从而记录数据符号信息。在编码时，二维码会利用计算机内部“0”和“1”的比特流概念，用黑白模块表示文字、数字等信息。扫码设备再通过图像输入或光电扫描，识别并还原其中的信息。

每种二维码码制都有自己的字符集、字符宽度和校验功能。同时，二维码还具备自动识别不同行信息、处理图形旋转变化等能力。

同样的内容，不做任何修改，反复生成出来的二维码图案也可能不同。这和编码方式、版本、纠错级别、掩膜规则、平台处理方式等因素有关。只要扫码后读出的内容一致，图案不同通常不影响正常使用。

可以简单理解为：同一句话从左到右写，或从上到下写，表达的仍是同一个意思。二维码也是一样，图案可以不同，但只要编码结果能被正确识别，扫码得到的内容就是一致的。

## 什么是容错率

容错率也叫纠错能力，是指二维码局部污损、遮挡或识别不完整时，仍能通过纠错信息还原原始内容的能力。

常见 QR 码有 4 个纠错级别：

- L 级：大致可恢复比例 约 7%
- M 级：大致可恢复比例 约 15%
- Q 级：大致可恢复比例 约 25%
- H 级：大致可恢复比例 约 30%

常见 QR 码使用里德-所罗门码（RS）做纠错。可以简单理解为：二维码在保存原始内容之外，还额外保存了一部分纠错信息。当图案中有一些模块读取错误或缺失时，系统可以利用这些纠错信息推算并还原原始内容。

纠错级别越高，二维码抗污损能力越强，但需要占用更多空间来保存纠错信息，可用于保存实际内容的容量会相应减少，二维码图案也可能更复杂。

需要注意的是，容错率不是“任意位置都可以遮挡这么多”。二维码三个角上的定位点会直接影响识别，如果遮挡到这些关键区域，即使面积不大，也可能无法扫码。中间的数据区域通常更能容忍轻微污损或遮挡。

调整纠错级别后，二维码需要重新计算图案分布，所以同一内容在不同纠错级别下生成的二维码图案可能不同。

## 常见问题

### 什么叫静态码

静态码是生成后内容固定不变的二维码。它通常由一段网址、文本、编号或其他数据直接生成。

静态码的特点是：

- 生码后内容不能修改；
- 删除后台记录后，已经导出的二维码图案仍可继续识别；
- 不支持图片、文件、音视频等网页内容；
- 不支持扫码统计；
- 无网络环境下也能识别出二维码中的原始内容；
- 扫描枪可以直接识别二维码里写入的内容。

如果你需要让扫描枪直接读出编号、文本或其他原始内容，建议使用静态码。

相关说明：[什么叫静态码](https://cli.im/help/faq/qr-code-knowledge/what-is-static-qr-code)、[活码和静态码有什么区别](https://cli.im/help/qr-code-tools/qr-code-knowledge/static-qr-code-dynamic-qr-code-intro)

### 什么叫活码

活码是生成后内容可修改、二维码图案保持不变的二维码应用方式。

草料活码的二维码图案中保存的是一段指向云端内容的短网址。扫码时，手机访问这段短网址，再打开你在后台配置好的内容页面。你修改后台内容时，二维码图案不变，扫码者看到的内容会更新。

活码的特点是：

- 内容可修改，二维码图案不变；
- 支持扫码次数、时间、地区等数据统计；
- 支持图片、文件、音视频、表单等更丰富的网页内容；
- 可配合后台管理能力，用于产品展示、表单收集、设备巡检、资产管理等场景；
- 扫码查看内容需要联网。

相关说明：[什么叫活码](https://cli.im/help/faq/qr-code-knowledge/what-is-dynamic-qr-code)、[快速了解二维码和活码](https://cli.im/help/qr-code-tools/qr-code-knowledge/qr-code-dynamic-qr-code)

### 如何分辨静态码和活码

可以先用[解码器](https://cli.im/deqr)查看二维码里写入的原始内容。

如果解码结果是文本、编号或目标网址本身，通常是静态码。

如果解码结果是草料活码短网址，例如 qr61xx、qr71xx、h.qr61xx 等，扫码后再打开云端内容页，通常是活码。

只看二维码图案疏密不能准确判断。内容很短的静态码也可能很简洁，内容较长的网址静态码也可能很密。

相关说明：[如何分辨静态码和活码](https://cli.im/help/faq/qr-code-knowledge/how-to-distinguish-static-and-dynamic)

### 为什么扫码枪扫描活码时会显示网址

扫码枪读取的是二维码图案里实际写入的内容。

如果是静态码，二维码图案里写入的就是文本、编号或目标网址，扫码枪可以直接读出这些内容。

如果是活码，二维码图案里写入的是一段指向云端内容的短网址，所以扫码枪通常会显示这段网址，而不是云端页面里的图文、文件或表单内容。

如果你需要用扫码枪直接识别内容，建议制作静态码；如果你需要扫码打开可更新的图文页面、文件或表单，建议使用活码。

相关说明：[活码和静态码有什么区别](https://cli.im/help/qr-code-tools/qr-code-knowledge/static-qr-code-dynamic-qr-code-intro)
