批量二维码生成:座位号、邀请码、设备贴标的命名规则与防伪

· 约 5 分钟 📦 二维码批量生成

批量二维码生成看起来只是”重复一百次单码生成”,但实际场景里命名混乱、内容重复、贴错码、扫不出来等问题层出不穷。这些坑都在生成之前——编号规则、内容设计、防伪标识、印刷工艺没规划好,事后纠正成本巨大。

命名规则:避免乱序的核心

最常见的坑

错误:1.png, 2.png, ..., 100.png
排序:1, 10, 100, 11, 12, ..., 2, 20, 21, ..., 9
打印顺序与编号顺序不一致 → 全乱

正确

✓ 001.png, 002.png, ..., 100.png(前补零)
✓ seat-A01.png, seat-A02.png, ..., seat-Z10.png(含可读编号)
✓ device-2026-001.png(年份 + 序号)

位数选择

  • < 100 个 → 3 位补零(001-099)
  • < 1000 个 → 4 位补零(0001-0999)
  • < 10000 个 → 5 位

含可读信息(推荐):

seat-A01-row1-col1.png    ← A 区 1 排 1 列
seat-A02-row1-col2.png
...
device-2026-Q1-001-machineA.png
                ↑序号  ↑设备名

优势

  • 文件名一眼看出对应位置 / 设备
  • 贴标时不需要查清单
  • 后期排查问题快

避免特殊字符

  • ✗ 空格 / 中文 / 中文标点 → 跨平台兼容性差
  • $ & % # ? → URL 编码 / Shell 转义麻烦
  • ✓ 字母 + 数字 + - + _

内容设计:避免重复 / 可预测

三类典型内容

类型示例唯一性方案
URL(邀请链接)https://x.com/?t=xxxURL 参数加唯一 token
纯文本(设备 ID)DEV-2026-001业务规则编号
复杂数据(vCard 名片)多字段字段组合(姓名 + 公司 + 电话)

唯一性的常见错误

❌ 自增数字邀请码(id=1, id=2, id=3)
   → 黑客直接试 id=1-1000 抢码

❌ 时间戳作 ID(时间戳=1700000000123)
   → 并发场景可能撞码

❌ 短码(4-6 位字母数字)
   → 容量小,更容易撞 + 被穷举

❌ 用户敏感信息作 ID(身份证 / 手机号)
   → 严重隐私泄露

推荐的唯一性方案

import uuid

# UUID v4(128 位随机)
token = str(uuid.uuid4())  
# 'a3f7c2e8-9b4d-4f1c-8e3a-7d9f2b5c6e8a'

# Base62 短链 token(更短但仍随机)
import secrets, string
chars = string.ascii_letters + string.digits
token = ''.join(secrets.choice(chars) for _ in range(16))
# 'aB3xY7nQ2vP9mK4w'

# 业务编号(部门 + 年份 + 自增)
biz_id = f"DEV-2026-{i:04d}"
# 'DEV-2026-0001'

容错等级:选 H 还是 L

二维码有 4 个容错等级:

等级容错率适用场景编码效率
L7%屏幕展示、清洁环境最高
M15%普通办公
Q25%户外、印刷品
H30%工业、加 logo、易污损最低

选择策略

  • 屏幕扫码(手机展示)→ L 或 M(容量优先)
  • 标签贴纸(室内)→ M 或 Q
  • 户外 / 工业贴标 → H(防污损 / 折痕)
  • 二维码中加 logo → H(logo 占据约 30% 区域,需要 H 才能正常识别)

陷阱:选 L 等级 + 印在户外 + 风吹日晒 → 几个月就扫不出来。

二维码下印可读编号

   ┌─────────────────┐
   │ ▓ ▓▓▓▓ ▓▓▓ ▓ ▓ │
   │ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓│
   │ ▓ ▓▓▓ ▓▓▓ ▓ ▓▓▓│
   │ ▓▓▓ ▓ ▓ ▓▓▓ ▓ ▓│
   │ ▓ ▓ ▓▓▓ ▓▓▓ ▓▓ │
   └─────────────────┘
       DEV-2026-001        ← 可读编号印在下方
       3F 东会议室          ← 简短说明

为什么必须印

  1. 二维码扫不出来时(破损、相机失灵)→ 用户能手动查
  2. 视觉识别——一眼看出对应位置
  3. 防贴错——肉眼对照
  4. 防伪——印错位的伪码与真码对不上

字号 / 间距

  • 字号 ≥ 二维码宽度的 1/8
  • 与码间距 5mm 以上(避免扫描误识别)
  • 黑色粗体(高对比)

印刷材质与耐久度

环境/用途              推荐材质             耐久度
────────────────────────────────────────────────
室内活动(一周)        铜版纸 + 不干胶      ⭐
室内长期(年)          PP 合成纸 + 哑膜      ⭐⭐⭐
户外短期(3 个月)      PVC + UV 印刷         ⭐⭐⭐
户外长期(年+)         PVC + UV + 哑膜       ⭐⭐⭐⭐
工业 / 户外永久        金属铝标 + 蚀刻        ⭐⭐⭐⭐⭐
高温 / 化学环境         陶瓷标牌              ⭐⭐⭐⭐⭐

典型材质成本(参考):

  • 铜版纸:¥0.05/ 张
  • PP 合成纸:¥0.20/ 张
  • PVC + UV:¥0.50/ 张
  • 金属铝标蚀刻:¥5-20/ 张

陷阱

  • 厨房 / 浴室 → 普通纸 1 个月就掉
  • 户外阳光直射 → 普通油墨褪色
  • 极端温度(< -20°C / > 60°C)→ 胶水失效

测试:批量生成后必做的校验

# Python 验证示例
import qrcode
from pyzbar.pyzbar import decode
from PIL import Image

contents = [...]  # 你的内容列表

# 生成
for i, content in enumerate(contents, start=1):
    qr = qrcode.QRCode(error_correction=qrcode.constants.ERROR_CORRECT_H)
    qr.add_data(content)
    qr.make(fit=True)
    img = qr.make_image(fill='black', back_color='white')
    img.save(f"qr-{i:04d}.png")

# 验证(解码回来对比)
for i, content in enumerate(contents, start=1):
    img = Image.open(f"qr-{i:04d}.png")
    decoded = decode(img)
    if not decoded:
        print(f"FAIL: qr-{i:04d}.png 无法解码")
    elif decoded[0].data.decode() != content:
        print(f"FAIL: qr-{i:04d}.png 内容不一致")

人工抽样

  • 每 100 个抽 5-10 个用手机扫
  • 不同手机(iOS / Android)+ 不同距离(10cm / 30cm / 50cm)
  • 印刷品先打 1 张样本,确认能扫再批量

一次性二维码(邀请码 / 验票)

单纯二维码做不到”扫一次失效”——必须服务端配合:

1. 生成时给每个码一个唯一 token
   → 数据库存 token + 状态(unused / used / expired)
   
2. 二维码内容 = URL + token
   https://example.com/checkin?t=abc123
   
3. 用户扫码 → 浏览器打开 URL
   → 服务端查 token 状态
   → unused → 提供服务,标记为 used
   → used / expired → 返回"已使用 / 已过期"
   
4. 用户截图传播也无效——token 是一次性的

安全要点

  • token 至少 16 位随机字符(不可预测)
  • 数据库 unique 约束防并发使用
  • 设置过期时间(7 天 / 24 小时)
  • 记录使用日志(IP / 时间 / UA)便于追溯

纯静态方案

  • 只能”信任客户端” —— 用 cookie 标记”已用”
  • 换设备 / 清缓存即可绕过
  • 不适合高价值场景

个人 / 小团队的简易批量方案

数量推荐方案
< 10单个生成 + 在线工具
10-100在线批量工具(CSV 上传)
100-1000在线工具 / Python 脚本
1000+Python / Node 脚本 + 定期生成
需要 logo / 颜色QR Code Monkey、专业 PDF 工具

Python 5 行搞定

import qrcode
contents = ["url1", "url2", "url3"]
for i, c in enumerate(contents, 1):
    qrcode.make(c).save(f"qr-{i:03d}.png")

Excel + 邮件合并(无编程):

  1. Excel 准备列表
  2. Word 邮件合并 + QR 字段
  3. 批量打印

实务清单

必做

  1. 文件名前补零 + 含可读信息
  2. 内容唯一性用 UUID / 随机 token(不要自增)
  3. 容错等级按场景选(H 是户外默认)
  4. 二维码下印可读编号
  5. 抽样测试不同设备 / 距离
  6. 印刷前先打样

避免

  1. 命名只用数字不补零
  2. 邀请码用自增数字
  3. 静态码做”一次性令牌”
  4. 户外用普通纸标签
  5. 容错等级 L + 户外环境
  6. 不印可读编号(扫不出无法兜底)

批量生成的核心不是”生成”——是前置规划:编号规则、内容唯一性、防伪标识、印刷材质,决定了贴出去后是用得久还是一团乱麻。

❓ 常见问题

批量生成的二维码文件名怎么取?常见命名错误?

两条规则:(1) 文件名前补零;(2) 含可读编号 + 内容摘要反例:(1) 1.png, 2.png, ..., 100.png —— 字母序排序 1, 10, 100, 11, ..., 2, 20 —— 大乱;(2) 001.png, 002.png, ..., 100.png —— 顺序对了但看不出对应什么内容;(3) 中文 第一桌.png, 第二桌.png —— Unicode 排序与中文阅读顺序不一致。推荐:(1) seat-001-A1.png —— 序号补零 + 可读位置;(2) device-2026-001.png —— 年份 + 序号;(3) invite-001-zhangsan.png —— 序号 + 用户名(公开场景)/ ID(隐私场景)。实务建议:(1) 不少于 3 位补零(< 100 个用 3 位、< 1000 用 4 位);(2) 文件名含可识别信息——批量打印后能直接看名字找对应的码;(3) 多批次生成时加时间戳前缀防覆盖;(4) 避免特殊字符(空格、中文标点、$/&%)—— 跨平台兼容差。

二维码内容怎么避免重复?批量生成怎么保证唯一性?

取决于内容类型链接类——URL 里加 ID 参数(如 ?id=001),后端按 ID 区分;邀请码类——生成 UUID / 随机字符串作为唯一码(避免按序自增可被预测);纯文本——加序号或时间戳前缀。生成方式:(1) Excel + 公式自动生成 ID 列;(2) 在线工具批量上传 CSV / 多行文本;(3) Python 脚本(uuid.uuid4() + 循环生成);(4) JavaScript 在线工具(多行输入解析为多个码)。陷阱:(1) 用自增数字 ID 作邀请码——容易被穷举(黑客试 1-1000 抢用);(2) 用时间戳——并发生成可能撞码;(3) 短码(4-6 位)——容量小、易冲突;(4) 用户敏感信息(身份证 / 手机号)作 ID—— 严重隐私泄露。实务:(1) 安全场景用 16-32 位随机字符串;(2) 内部场景按业务规则编号("DEV-2026-001");(3) 数据库 unique 约束防重;(4) 生成后用 Excel 去重 / 校验列表。

批量打印后怎么防止"贴错码"?

关键是"码内容"和"贴标位置"双重对照贴标流程:(1) 文件名包含目标位置 / 设备号——device-2026-001-machine-A.png;(2) 打印时按文件名顺序物理排列;(3) 贴标人对照清单——每贴一个勾掉一个;(4) 贴完抽查若干测试。预防机制:(1) 二维码内容含可视编号——比如码下方印 "DEV-001",与贴标位置编号一致;(2) 颜色 / 形状区分——不同部门 / 不同区域用不同底色;(3) 打印时附带说明书——"本批次共 100 个码 / 编号 001-100"。贴错的纠正:(1) 撕下来重贴——但留胶印,难看;(2) 直接覆盖——可能扫描时识别错;(3) 重新打印——成本高但最干净。实务:(1) 重要场景(医疗、工厂设备)—— 贴完拍照存档,万一有问题能追溯;(2) 普通场景(座位号、餐桌)—— 贴错重贴或覆盖;(3) 大批量(1000+)—— 分批处理 + 每批校验。

二维码下面应该印可读编号 / 文字吗?

强烈建议印为什么:(1) 二维码扫不出来时(破损、相机故障)—— 用户能手动查文字;(2) 视觉识别——一眼看出对应位置 / 设备;(3) 防贴错——肉眼对照;(4) 防伪——印刷错位的伪造码与真的对不上。应该印什么:(1) 短编号("A-12"、"DEV-001")—— 5-10 字符够;(2) 简短说明("3 楼东会议室")—— 实际意义;(3) 不要印完整 URL —— 太长且 URL 应该藏在码里。布局:(1) 编号印在二维码下方 —— 视觉重心稳定;(2) 字号 ≥ 二维码宽度 1/8 —— 大到一眼可读;(3) 用粗体黑色 —— 高对比;(4) 与码留 5mm 间距 —— 不影响扫描区。陷阱:(1) 文字太靠近二维码 —— 扫描时被识别为内容的一部分(罕见但有);(2) 文字太大占据空间 —— 整体不美观;(3) 文字和码不同字体 —— 视觉混乱。

二维码贴在户外 / 设备上能撑多久?怎么选材质?

取决于材质 + 工艺 + 环境材质选择:(1) 普通铜版纸 + 不干胶 —— 室内 1-2 年,户外 3-6 个月;(2) PP 合成纸 + 防水 + 哑光膜 —— 室内 3-5 年,户外 1-2 年;(3) PVC 标签 —— 户外 2-3 年;(4) 金属铝标牌(蚀刻或激光)—— 5-10 年;(5) 陶瓷标牌 —— 高温 / 化学环境耐用。工艺要求:(1) 数字打印——日常用足够;(2) UV 印刷——抗紫外线,户外推荐;(3) 激光刻蚀——金属底材永久;(4) 丝网印刷——大批量、高耐久。贴标前:表面清洁、干燥、平整 → 否则胶水失效。陷阱:(1) 厨房 / 浴室 / 洗车场 —— 高湿环境普通纸标签 1 个月就掉;(2) 户外阳光直射 —— 普通油墨褪色,需 UV 印刷;(3) 频繁触摸 / 摩擦 —— 需要表面亚膜或镭射膜保护;(4) 极端温度(< -20°C / > 60°C)—— 胶水可能失效。实务:(1) 临时活动 → 普通铜版纸;(2) 长期内部资产 → PP 合成纸;(3) 户外固定标识 → PVC 或金属。

二维码批量生成后怎么测试是否都能扫出来?

抽样 + 自动化测试抽样测试:(1) 每 100 个码抽 5-10 个用手机扫;(2) 用不同手机(iOS / Android)扫——少数旧机型对密集码识别差;(3) 不同距离(10cm / 30cm / 50cm)测试。自动化测试:(1) 用 Python qrcode + pyzbar——生成后立即解码验证;(2) 写脚本批量解码,对比与原始内容是否一致;(3) 扫描分辨率不同——印刷品需要测最低识别 DPI。典型问题:(1) 过密码——超过 v40(177×177 模块)扫描器吃力;(2) 容错等级低——L 级(7%)容错差,污渍 / 折痕扫不出;(3) 打印模糊——低分辨率打印导致黑色块边缘晕染;(4) 光线反射——亚光膜可改善;(5) 颜色对比不足——彩色二维码扫描率低。实务:(1) 内容长 → 容错等级用 H(30% 容错)即使大面积污损也可读;(2) 户外 / 工业场景 → 容错等级 H + 大模块;(3) 扫描距离远 → 增大整体尺寸;(4) 印刷前先打印一份样本测试。

邀请码 / 一次性二维码怎么实现"扫一次就失效"?

核心:服务端验证 + 数据库标记实现流程:(1) 生成时给每个码一个唯一 token —— https://example.com/invite?t=xxx;(2) 服务端有数据库表记录 token 状态(unused / used / expired);(3) 扫码访问时——服务端检查状态,未使用则提供服务并标记为 used;(4) 重复扫描——返回"已使用"。防伪要点:(1) token 必须随机不可预测(16+ 位 UUID);(2) 数据库 unique 约束 + 事务——防止并发重复使用;(3) 设置过期时间——"7 天内有效";(4) 用户使用日志——谁、何时、何 IP 使用,便于追溯异常。纯静态二维码无法实现:二维码本身只是一个 URL —— 是否"已用"的状态必须服务端管理。陷阱:(1) 没有服务端 → 用本地 cookie 做"已使用"标记—— 换设备 / 清缓存就失效防御;(2) 邀请码可截图传播——一次性令牌的 URL 一旦被截图,谁先扫谁用;(3) 把状态写在二维码内容里——直接被复制可绕过。实务:婚礼 / 活动邀请 + 高价值场景 → 务必服务端;普通签到 → 一次性 cookie 标记够用。

个人也想批量生成二维码(如名片、家庭设备贴标),有简单方法吗?

几种入门方法Excel + Word 邮件合并:(1) Excel 列表准备好内容;(2) Word 用"邮件合并"功能 + 二维码字段;(3) 部分 Word 模板需要装宏。Python 脚本(推荐技术党):``python\nimport qrcode\nfor i, content in enumerate(contents, start=1):\n qr = qrcode.make(content)\n qr.save(f"code-{i:03d}.png")\n``(5 行搞定)。在线批量工具:上传 CSV / 多行文本 → 一次生成 + 打包 ZIP 下载,零编程。Notion / Airtable + 插件:数据库列里直接有"二维码"字段,自动生成。实务:(1) 一次性 < 10 个 → 单个生成够用;(2) 10-100 个 → 在线批量工具;(3) 100+ 或定期生成 → 写脚本 / 用 Notion 模板;(4) 需要自定义样式(带 logo、颜色) → 用专业工具如 QR Code Monkey、QR Code Generator Pro。

📦 打开 二维码批量生成 多行输入·name|content 自定义文件名·ZIP 打包下载