QR码最佳实践:尺寸、纠错与内容限制

8 min2026年5月18日

QR码尺寸要求:基础知识

QR码的尺寸要求取决于两个因素:编码的数据量和扫描距离。QR码本质上是一个由黑白模块(小方块)组成的网格。最小的QR码(Version 1)是 21×21 模块,最多容纳 25 个字母数字字符。最大的(Version 40)是 177×177 模块,最多容纳 4,296 个字母数字字符。数据越多 = 模块越多 = 需要更大的物理尺寸才能可靠扫描。

可靠扫描的最小物理尺寸由模块大小决定——每个小方块必须大到摄像头能分辨出来。对于智能手机在一臂距离(约 25 cm)扫描的场景,每个模块至少需要 0.33 mm。一个 Version 1 的码(21 模块 + 8 模块静默区 = 29 模块宽)至少需要 10 mm × 10 mm。Version 10 的码(57 模块)则至少需要 25 mm × 25 mm。

印刷材料方面,我的经验法则是:名片和近距离扫描场景,QR码至少 2 cm × 2 cm(0.8 英寸);产品包装上用 3-4 cm;海报或需要远距离扫描的标识牌则需要 10 cm 以上。扫描距离大约是 QR码宽度的 10 倍——一个 3 cm 的码大约能在 30 cm 的距离上被扫到。

在中国的应用场景中,考虑到大部分用户使用微信或支付宝扫码,这些App的扫码能力通常优于原生相机。但为了兼顾所有扫码工具,还是建议遵循上述最小尺寸标准。餐厅桌贴、奶茶店点单码推荐 3 cm 以上,商场导视牌上的码至少 8-10 cm。

纠错等级(L、M、Q、H)

QR码内置了基于 Reed-Solomon 码的纠错机制。这意味着即使部分码被损坏或遮挡,依然可以正常扫描。共有四个等级:L(低,可恢复 7%)、M(中,可恢复 15%)、Q(较高,可恢复 25%)、H(高,可恢复 30%)。纠错等级越高,冗余数据越多,模块也就越多——同样的内容会生成更大的码。

这个权衡是实实在在的。一个类似 "https://example.com/page" 的 URL,在 L 等级下生成 Version 2 的码(25×25 模块)。同样的 URL 在 H 等级下会生成 Version 4 的码(33×33 模块)——模块数量增加了 74%,编码的数据却完全一样。对于干净平整的表面(屏幕显示、刚印好的材料),L 或 M 就够了。如果码可能被弄脏、刮花或部分遮挡(产品包装、户外标识、仓库标签),请选择 Q 或 H。

纠错机制也是"QR码中间放 Logo"这个技巧的原理所在。当你在码的中心放一个 Logo,本质上是故意破坏了那部分模块。如果使用 H 等级(30% 恢复能力),理论上可以遮挡 30% 的码面积——但实际操作中,Logo 面积建议控制在 15-20% 以内,因为损坏分布不均匀。三个大的定位标记(角落)和对齐图案必须完整保留,不能被遮挡。

我的建议:大多数场景选 M 等级(15%)。它能应对轻微的印刷瑕疵和小面积损坏,同时码的尺寸保持紧凑。只有需要叠加 Logo 或预期会有物理损坏时才用 H。只有在追求最小码尺寸时才用 L(比如屏幕对屏幕扫码等受控环境)。

数据容量与内容限制

L 等级下的最大容量:7,089 个数字字符、4,296 个字母数字字符,或 2,953 字节的二进制数据。H 等级下,这些数值分别降至 3,057 个数字、1,852 个字母数字或 1,273 字节。但实际使用中很少接近这些极限,因为越大的码越难可靠扫描。

对于 URL(QR码最常见的内容类型),建议控制在 100 个字符以内。100 字符的 URL 在 M 等级下生成 Version 7 的码(45×45 模块)——仍然很容易扫描。300 字符的 URL 会生成 Version 13 的码(69×69 模块)——已经偏大了。如果 URL 太长,使用短链服务。QR码不关心目标网页是什么——它只编码你给它的文本。

编码模式会影响容量。QR码会自动选择最高效的编码方式:Numeric 模式(仅限 0-9,每字符 3.3 bits)、Alphanumeric 模式(0-9、A-Z、空格、$%*+-./: ,每字符 5.5 bits)、Byte 模式(任意 UTF-8,每字符 8 bits)。大写 URL 比小写更省空间,因为它们符合 Alphanumeric 模式。"HTTPS://EXAMPLE.COM" 比 "https://example.com" 使用的模块更少——这是一个在尺寸受限时值得知道的技巧。

一个容易踩的坑:WiFi QR码(格式为 WIFI:T:WPA;S:网络名;P:密码;;)如果密码很长,码会变得很大。一个包含 63 字符 WPA2 密码的 WiFi 码会产生 Version 8 的码。如果是给公司或商铺生成 WiFi 码,把密码长度控制在合理范围内,或者用我们的 qr-code-generator 工具预览一下尺寸再去印刷。

QR码版本 vs 容量对照表(纠错等级 M):

版本   模块数     字母数字容量    典型用途
  1    21×21         20         短链接 (bit.ly/abc)
  2    25×25         38         中等长度 URL
  3    29×29         61         完整 URL(无参数)
  4    33×33         90         带短参数的 URL
  5    37×37        122         带中等参数的 URL
  7    45×45        196         长 URL 或 vCard
 10    57×57        311         完整 vCard
 14    73×73        489         大段文本
 20    97×97        858         超大数据量
 40   177×177      2,331        最大容量(极少使用)

经验法则:尽量控制在 Version 10 以内,确保可靠扫描。
Version 15 以上需要近距离、高分辨率摄像头才能识别。

破坏扫描能力的设计错误

错误一:静默区不足。QR码四周需要至少 4 个模块宽度的白色边框(静默区),帮助扫描器将码与周围内容区分开来。裁掉静默区或把码放在复杂背景上,是二维码扫不出来的头号原因。我见过太多设计师为了"省空间"把边框裁掉,然后百思不得其解为什么 30% 的用户扫不出来。

错误二:对比度不够。QR码在最大对比度下效果最好——白底黑码。深蓝配浅蓝、深灰配中灰,都会降低扫描器区分模块的能力。ISO 18004 标准规定了最低对比度要求,但很多手机摄像头在对比度低于 40% 时就会挣扎。坚持用黑白配色,或者深色配白色背景。

错误三:颜色反转。白色模块配黑色背景(反色QR码)在大多数现代扫描器上技术上是可行的,但老款手机和一些专用扫码设备无法识别反色码。如果必须使用深色背景,把QR码放在一个带有完整静默区的白色矩形内,而不是直接反转码本身的颜色。

错误四:相对于扫描距离,印得太小。一个 1.5 cm 的QR码印在会议展板上、期望人从 3 米外扫到——这永远不可能。记住规则:扫描距离 ≈ 码宽度的 10 倍。如果需要 3 米的扫描距离,码至少要 30 cm 宽。这个错误在高速公路广告牌(码太小)、餐厅桌牌(码放在暗角)、活动胸牌(码印在照片背景上)上屡见不鲜。

不同用途的QR码

URL 链接:最常见的用途。编码完整的 URL(包含 https://)。除非你永久控制短链服务,否则不要编码短链——如果短链服务挂了,所有印刷品上的码都会作废。如果需要追踪效果,加 UTM 参数:https://example.com/page?utm_source=qr&utm_medium=print&utm_campaign=flyer2026。参数中的特殊字符要做 URL 编码(我们的 url-encoder 工具可以帮你处理)。

WiFi 凭证:格式为 WIFI:T:WPA;S:网络名称;P:密码;H:false;; 其中 T 是安全类型(WPA、WEP 或 nopass),S 是 SSID,P 是密码,H 表示是否为隐藏网络。iOS 和 Android 都能识别这个格式并自动弹出连接提示。非常适合办公室访客网络、酒店、咖啡馆等场景。

vCard(联系人信息):vCard 格式(BEGIN:VCARD...END:VCARD)可以编码姓名、电话、邮箱、地址和公司信息。但这类码很容易变大——一个包含地址的完整 vCard 可能超过 300 个字符,需要 Version 10 以上的码。建议精简内容:姓名、电话、邮箱就够了,其他信息让对方自己查。

支付码:中国用户最熟悉的QR码应用之一。支付宝和微信支付都使用专有的QR码格式来触发支付流程。商家收款码、个人收款码、转账码各有不同的格式规范。注意:不要简单地把一个支付链接编码成QR码——原生支付码能直接唤起 App 内的支付流程,体验更流畅。如果面向国际用户,还需要考虑不同地区的支付标准(欧洲的 EPC QR 用于 SEPA 转账,印度的 UPI,巴西的 PIX),目前并没有全球通用的支付QR标准。

动态QR码 vs 静态QR码

静态QR码直接编码最终内容。如果目标变了,就得重新生成一个码。动态QR码编码的是一个短跳转链接(如 qr.example.com/abc123),这个链接可以随时修改指向的目标。码本身永远不变,但目标地址可以在印刷之后随时更新。

动态码有两个优势:体积更小(短跳转链接 = 更少的模块)、可追踪(跳转服务器会记录扫描次数、地理位置、设备类型)。但缺点也很明显:它完全依赖跳转服务的正常运行。如果服务宕机或者公司倒闭,所有印刷品上的码瞬间作废。我见过真实案例——某些QR码服务转型或破产后,成千上万的印刷材料一夜之间变成废品。

我的建议:永久性内容(网站 URL、WiFi 密码、联系方式)用静态码。只有在你确实需要在印刷后修改目标时才用动态码(比如 A/B 测试落地页、季节性促销、定期更新的内容)。如果只是想追踪扫描数据,在静态 URL 中加 UTM 参数就能实现——既有分析数据,又没有单点故障的风险。

成本方面:大多数动态QR码服务按月收费(商业版每月 $15-50 不等)。如果你有 100 个码分布在各种印刷品上,这就是一笔永久性的周期开支。而一个指向你自己域名的静态码,印完之后零成本。如果确实需要动态功能,可以考虑自己搭建跳转服务——本质上就是一个"短码→URL"的数据库映射,技术门槛极低,而且你永远掌握控制权。

打印前测试QR码

印刷之前,务必用至少 3 部不同的手机测试。测试设备包括:一部老款手机(比如 iPhone SE 或千元价位的安卓机——摄像头更慢、分辨率更低)、一部当前旗舰机(确认在理想条件下能正常工作)、以及一部贴了磨损保护膜或屏幕有划痕的手机(模拟真实使用环境)。如果三部手机都能在预期距离内可靠扫描,就没问题了。

在下单批量印刷之前,先用办公室打印机按实际尺寸打一张试试。喷墨和激光打印机处理细节的方式不同,纸张纹理也会影响对比度。光面纸在某些光照条件下会反光,干扰扫描。哑光纸对QR码来说通常更安全。

测试编码的内容,而不仅仅是"能不能扫出来"。我曾经印了 5,000 份传单,上面的QR码扫描完美——但 URL 拼写有误。码本身没问题,指向的却是 404 页面。扫描最终版的码,打开链接,验证目标页面在手机上能正常加载。如果加了追踪参数,确认分析工具中能正确接收。

大批量印刷(10,000 份以上)的情况下,向印刷厂索要打样并测试打样件。商业印刷工艺(胶印、数码印刷)产出的效果可能与办公打印机略有不同。模块边缘可能会有轻微洇墨,降低对比度。一个在你激光打印机上扫得好好的码,在商业胶印机上如果模块尺寸刚好在最小可行范围,就可能出问题。