二维码与条形码速查表
二维码与条形码是物理世界与数字系统之间的桥梁。本页汇总常见码制、容量、适用场景,以及 QR Code 纠错级别和 WiFi 二维码标准格式。
实践注解
- 二维码的纠错等级与容量此消彼长H 级(约 30% 纠错)能扛住较大遮挡或印刷磨损,但同样尺寸下可用容量明显低于 L 级。需要贴在海报上或可能被遮挡时用 H,纯屏幕展示用 M/L 即可。
- 内容越长,模块越密,扫描越难二维码尺寸固定时,字符越多单个模块越小,低分辨率摄像头就越难识别。长 URL 应先经短链或改用更短的字段名,而不是把二维码印大——印大会受限于可用的版面。
- 一维码有校验位,手工构造容易过不了校验EAN-13、CODE128 等含校验位或特殊的起止符,随手拼接数字会生成扫不出来的码。生成必须交给库,校验失败时应报错而不是静默输出。
数据来源
- ISO/IEC 18004 (QR Code)
- ISO/IEC 15417 (Code 128)
- ISO/IEC 15420 (EAN/UPC)
上述编号、名称与定义均来自公开规范,本站不主张对规范数据本身的独创性;本页的编排方式、中文释义与实践注解由本站撰写。
原理解析
二维码与条形码本质是把「数据」编码成机器可识读的图形符号。一维条形码(如 CODE128、EAN-13)只在水平方向用粗细不同的条与空表示字符,容量小、需特定扫描角度;二维码(如 QR Code)在纵横两个方向编码,容量大、可纠错、手机摄像头任意角度可读。
二维码的「纠错级别」(L/M/Q/H,对应约 7%、15%、25%、30% 容错)通过 Reed-Solomon 冗余实现:在图案中分散冗余信息,即使部分被遮挡、污损或贴上 Logo,仍能还原原始数据。纠错级别越高,同等内容下图案越密集、可容纳的数据越少——因此要在容量与鲁棒性之间权衡。
什么时候该查这张表
这张表在你要给内容选条码制式、或是决定二维码的纠错等级时有用。它把 QR Code、Code 128、EAN-13、Code 39、Data Matrix、Aztec 等按类型、容量与典型场景并列,并给出 L/M/Q/H 四级纠错的含义。
不该查的情况:你在设计完整的打印与识别方案。码制选择要考虑扫描距离、打印工艺、是否需要双向(扫码后能否回传数据)、以及对方设备能否识别某些制式,这些需要实际测试而非查表。
判断标准:先看是否需要双向。一维码只存数据、扫完就结束;二维码能存 URL 或指令并支持纠错,适合交互场景。纯记录编号(如订单号入库)用一维码更高效;需要用户拿手机扫(点菜单、付款、查看详情)必须用二维码。
特别注意纠错等级与容量的权衡:H 级能纠 30% 的污损,但容量降到 M 级的约 55%。内容多时盲目选 H 会导致码体过大、密度超出打印机或屏幕的分辨极限,反而扫不出来。
边界与常见陷阱
纠错等级越高容量越小,长内容时 H 级可能扫不出
纠错通过冗余数据实现,等级越高冗余越多:L≈7%、M≈15%、Q≈25%、H≈30%,可承受的污损比例随之上升,代价是同样内容需要更大尺寸。内容较长时用 H 级,码点密度会超出屏幕与打印机的分辨极限,从远处或反光环境完全扫不出。正确做法是先按内容长度选最小够用的等级(内容短、无遮挡用 L/M;印刷可能磨损用 Q/H),必要时改用 Data Matrix 或 Aztec 提升同面积容量。
静态条码与动态条码是两种不同的产品形态
静态条码把内容直接印在标签上,一码一物,成本极低,适合货架与固定资产。动态条码(以及二维码里的短链)指向服务器上的一条记录,扫码时后端查一次再决定返回什么,好处是内容可变、可统计、可撤销(商品下架或召回时改数据库即可,不用换标签)。动态方案要权衡:服务器与短链服务成为依赖,标签作废或链接失效会直接影响履约。
静区缺失是「扫不出」的高频原因
所有二维码规范都要求四周留白(静区),通常是模块宽度的 4 倍。留白不是美观要求而是解码器定位图形的前提 —— 没有足够留白,扫描器无法可靠识别码的边界,会报「找不到码」或直接识别出错误内容。打印时若图被裁边、贴到容器圆角处、或贴着其他文字,静区就被破坏。设计稿里应把静区算进画布尺寸,并在条码周围留出足够留白。
与相邻内容的分工
要生成或解码二维码,用站内二维码相关工具;本页是选型对照,不提供生成管线。
要处理条码在包装上的印刷工艺(热敏、激光、喷墨)与扫码枪选型,属硬件与工艺范畴,本表不覆盖。
要理解短链服务与动态码的可用性设计,属后端架构范畴,需要评估降级方案。
若目的是排查某个条码扫不出,先量静区与模块宽度,再看对比度与污损,最后才怀疑码制选错。
实战片段
要点:① 纠错等级按内容长度选最小够用的(L/M/Q/H 冗余约 7/15/25/30%),长内容用 H 会让模块密度超出分辨极限反而扫不出;② 生成时必须给足静区(margin: 4),它是解码器定位边界的前提,裁边或贴圆角会破坏它;③ 打印前算一下最小模块物理尺寸,300dpi 下不低于 0.33mm;④ 动态码(短链指向后端记录)内容可变可撤销但引入服务端依赖,静态码成本低无依赖但改内容就得换标签,按履约要求选。
// ① 按内容长度选纠错等级(不是越高越好)
function pickEcc(textLength) {
if (textLength < 100) return 'L' // 约 7% 冗余
if (textLength < 300) return 'M' // 约 15%
if (textLength < 600) return 'Q' // 约 25%
return 'H' // 约 30%,仅在内容短且需抗污损时用
}
// ⚠️ 内容长还选 H ⇒ 模块密度超出分辨极限 ⇒ 反而扫不出
// ② 生成时务必给足静区(quiet zone,通常 4 个模块)
import QRCode from 'qrcode'
const png = await QRCode.toBuffer('https://example.com/p/12345', {
errorCorrectionLevel: 'M',
margin: 4, // ← 静区;设 0 会导致很多扫码器找不到边界
width: 512, // 物理尺寸要够大
})
// ③ 打印前自检:对比度与最小模块尺寸
function checkPrintable(svg, minModuleMm = 0.33) {
// 300dpi 打印时,最小模块应 ≥ 0.33mm,否则热敏头或激光会糊掉
const m = svg.match(/viewBox="0 0 (d+) (d+)"/)
if (!m) return { ok: false, reason: '缺 viewBox,无法算模块尺寸' }
const modules = Number(m[2]) - 8 // 减去 2×4 静区
return { ok: true, modules, minMm: (512 / modules).toFixed(2) }
}
// ④ 动态码:短链 + 后端记录(内容可变、可撤销)
const code = await QRCode.toDataURL('https://s.example.com/' + token, { margin: 4 })
// 商品下架 / 召回:只改数据库记录,标签不用换
// ⑤ 静态码:内容直接编码(成本低,无依赖)
const staticCode = await QRCode.toBuffer(JSON.stringify({ sku: 'A-123', lot: 6 }), {
errorCorrectionLevel: 'Q', margin: 4,
})
// ⚠️ 内容不可变 ⇒ 变更就意味着换标签
// ⑥ 一维码用于纯编号(更小的标签面积)
import JsBarcode from 'jsbarcode'
// Code128 可变长字符串,EAN-13 限 13 位数字
JsBarcode(svgEl, '1234567890123', { format: 'EAN13', margin: 10 })常见码制对比
| 码制 | 类型 | 容量 | 最佳场景 |
|---|---|---|---|
| QR Code | 矩阵二维码 | 数字 7,089 字 / 字母 4,296 字 / 二进制 2,953 B | URL、支付、名片、WiFi 连接、移动场景 |
| Micro QR | 微型矩阵二维码 | 数字 35 字 / 字母 21 字 | 空间受限的小零件、IC 标签 |
| CODE128 | 一维条形码 | ASCII 128 字符集,高密度 | 物流、仓储、序列号、内部管理 |
| EAN-13 | 一维条形码 | 13 位数字(含校验位) | 零售商品、图书 ISBN |
| UPC-A | 一维条形码 | 12 位数字(含校验位) | 北美零售商品 |
| CODE39 | 一维条形码 | 数字、大写字母、部分符号 | 工业、国防、资产标签 |
| ITF-14 | 一维条形码 | 14 位数字 | 外箱包装、物流单元 |
QR Code 纠错级别
| Level | 可恢复比例 | 建议场景 |
|---|---|---|
| L | 约 7% | 内容短、扫码环境好 |
| M | 约 15% | 默认级别,平衡容量与容错 |
| Q | 约 25% | 印刷质量一般、需要较高容错 |
| H | 约 30% | Logo/图案遮挡、恶劣环境 |
常见问题
QR Code 的四个纠错级别怎么选?
默认选 M(15% 容错),容量与容错最平衡。如果要在二维码中间放 Logo 或印刷质量较差,选 H(30%)。内容很短且扫码环境好时可选 L(7%)换取更大容量。纠错级别越高,同等内容下二维码图案越密集。
一维码和二维码有什么区别?
一维码只在一个方向存储信息,容量小(通常几十位字符),需要特定扫描角度,适合商品 SKU、快递单号等短编码。二维码在纵横两个方向存储信息,容量大、可容错、可被手机摄像头任意角度读取,适合 URL、支付、名片等复杂信息。
WiFi 二维码的格式是什么?
标准格式为 WIFI:T:<加密类型>;S:<SSID>;P:<密码>;H:<是否隐藏>;;,例如 WIFI:T:WPA;S:MyNetwork;P:MyPassword;;。扫描后手机可直接连接,无需手动输入。
条形码可以包含中文吗?
常见一维码(CODE128/EAN/UPC)只能编码数字、字母或 ASCII 符号,无法直接表示中文。需要表示中文时应使用二维码(QR Code),它支持 UTF-8 编码。