二维码与条形码速查表

二维码与条形码是物理世界与数字系统之间的桥梁。本页汇总常见码制、容量、适用场景,以及 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 BURL、支付、名片、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 编码。