条形码格式全解:EAN-13、Code128、QR 怎么选,校验位是怎么算的

· 约 3 分钟 条形码生成

条形码本质是”把数字/文字编码成可被光学识别的条纹图案”。不同格式的差异在于:能编什么、编多少、在什么场景扫。选错格式,扫描枪不认;打印分辨率不够,再好的格式也扫不出来。

主流格式速览

EAN-13:零售商品的国际标准

13 位纯数字,结构固定:

[国家/地区前缀 3位] [厂商识别代码 4-7位] [商品项目代码] [校验位 1位]
      690                 12345              678              9
  • 中国大陆前缀:690~699
  • 最后一位是校验位,由前 12 位计算得出
  • 扫描仪认的是条纹,数字只是人类可读备份
  • 只能用于零售商品,需 GS1 授权的厂商码

Code128:最灵活的一维码

可编 ASCII 全字符集(数字、大小写字母、标点),无长度上限(实际建议 ≤ 48 字符,过长条形码太宽)。

内部分三个子集自动切换:

  • Code128A:数字 + 大写字母 + 控制字符
  • Code128B:数字 + 大小写字母 + 标点(最常用)
  • Code128C:纯数字,两位一组编码,密度最高

快递单号、仓库货位码、门票、资产标签——凡不是零售商品的场景基本选 Code128。

Code39:老旧但兼容性极好

只能编 43 个字符(大写字母 + 数字 + 少量符号),自带起止符 *,不需要校验位。
老设备、工业扫描枪、政府证件(部分)——遇到”只支持 Code39”的系统时用。

QR Code(二维码)

严格说不是”条形码”(一维码),但常被混称。最多可编约 3000 个数字 / 2000 个字母 / 1800 个中文字,内置纠错(4 级,最高级 L 级约 30% 损毁仍可读)。详见二维码生成工具

EAN-13 校验位计算

手算校验位,方便验证一个码是否合法:

前 12 位:6 9 0 1 2 3 4 5 6 7 8 9
位置:     1 2 3 4 5 6 7 8 9 10 11 12
权重:     1 3 1 3 1 3 1 3 1  3  1  3

加权求和:
6×1 + 9×3 + 0×1 + 1×3 + 2×1 + 3×3 + 4×1 + 5×3 + 6×1 + 7×3 + 8×1 + 9×3
= 6 + 27 + 0 + 3 + 2 + 9 + 4 + 15 + 6 + 21 + 8 + 27 = 128

128 mod 10 = 8
校验位 = 10 - 8 = 2

完整 EAN-13:6901234567892

打印质量是扫描成功的关键

条形码扫不出来,95% 是打印问题,不是格式问题。

分辨率要求

用途最低 DPI建议 DPI
普通文件打印203 DPI300 DPI
零售商品标签300 DPI600 DPI
快递单203 DPI300 DPI
远距离扫描(仓库)600 DPI600+ DPI

静区(Quiet Zone):条形码两端必须留空白,EAN-13 左侧至少 3mm,右侧至少 2mm。工具生成的 PNG 已包含静区,打印时不要裁边。

颜色要求

  • 条:深色(黑色最佳,深蓝/深绿可用)
  • 底:白色或浅色(不能是彩色渐变)
  • 对比度 ≥ 70%

格式选择速查

场景推荐格式
超市零售商品EAN-13(需 GS1 厂商码)
快递单号、物流追踪Code128
仓库货位、资产管理Code128
门票、入场券Code128 或 QR
营销落地页 URLQR Code
支付收款QR Code
老设备/政府证件Code39

配套工具

❓ 常见问题

EAN-13 和 Code128 有什么区别?

EAN-13 只能编 13 位数字,Code128 能编任意 ASCII 字符串。EAN-13 是零售商品的国际标准——固定 13 位,前 3 位是国家/地区前缀(中国大陆 690-699),后续是厂商码+商品码,最后 1 位是校验位,不能多也不能少。Code128 没有长度限制,能编数字、字母、标点,适合快递单号、仓库货位码、内部流水号——凡是不是"零售商品"的场景基本都用 Code128。

EAN-13 最后一位校验位怎么算?

奇偶加权求和取模。步骤:(1) 把前 12 位从左到右,奇数位(1/3/5…)权重 ×1,偶数位(2/4/6…)权重 ×3;(2) 全部加总;(3) 加总值 mod 10,若余数为 0 则校验位是 0,否则校验位 = 10 - 余数。示例:前 12 位 690123456789,计算:6×1+9×3+0×1+1×3+2×1+3×3+4×1+5×3+6×1+7×3+8×1+9×3 = 6+27+0+3+2+9+4+15+6+21+8+27 = 128,128 mod 10 = 8,校验位 = 10-8 = 2,完整码 6901234567892

条形码扫不出来,通常是什么原因?

最常见的三个原因:(1) 打印分辨率不足——条形码的细条(bar)宽度低于打印机精度,细条糊掉变成粗条。标准打印至少要 300 DPI,快递标签建议 600 DPI;(2) 静区(quiet zone)不够——条形码两端必须留足空白区,EAN-13 左右各至少 3 倍最窄条宽,否则扫描仪无法判断起止;(3) 背景底色干扰——条形码必须深色条+白色底,不能放在彩色/渐变背景上,对比度低于 70% 扫描成功率急剧下降。

一维码和二维码(QR)该选哪个?

用途决定选择。一维码(EAN-13/Code128)——(1) 专用扫描枪快速扫描(收银台、仓库);(2) 数据量小(几十字节);(3) 损坏容忍度低,污损即报废;(4) 零售商品必须用 EAN-13(国际标准)。二维码(QR Code)——(1) 手机摄像头扫描;(2) 数据量大(最多几千字节,可编 URL、JSON);(3) 内置纠错,部分损坏仍可读;(4) 营销、支付、防伪、物流信息量大的场景。两者并非替代关系——超市商品往往两种都印,一维码给收银枪,QR 给用户手机扫详情页。

生成的条形码能直接用于零售商品吗?

EAN-13 条形码可以用,但条码本身只是格式,号码的合法性是另一回事。如果你想把商品卖进超市,需要向 GS1 中国(中国物品编码中心)申请厂商识别代码,才能获得合法的 EAN 前缀;自行编造的 13 位数即使格式正确,扫描后数据库查不到记录,收银台会报错。内部使用(仓库管理、资产标签、活动票券)不需要向 GS1 注册,用工具生成的条形码直接可用。

打开 条形码生成 CODE128/EAN/UPC/ITF/Code39·自定义颜色尺寸·PNG/SVG