识别条码这件事,多数人的困惑不是「怎么扫」,而是为什么有时候一扫就出来、有时候怎么都扫不出。区别往往不在工具,在图像质量和码制本身。
先说三个结论:
- 一维条码比二维码难识别得多。 一维条码只在水平方向编码,竖直方向的信息全丢了,所以对分辨率、倾斜、损坏都更敏感。
- 识别前先确认码制在支持范围内。 不支持就怎么调图像都没用,常见的是 PDF417、Data Matrix 这类堆叠码和矩阵码。
- 摄像头扫不动就换成上传图片。 实时识别的每一帧都在抖,上传一张拍清楚的静态图成功率通常高得多。
一、摄像头实时 vs 上传图片
两种方式解决的是不同问题,不是替代关系:
| 方式 | 适用场景 | 局限 |
|---|---|---|
| 摄像头实时识别 | 手上只有实物、需要连续扫多个、环境光线可控 | 对焦和抖动影响大,弱光或反光场景容易失败 |
| 上传图片识别 | 已有截图或照片、条码在电脑屏幕里、需要反复核对 | 需要先有一张足够清晰的图 |
实际操作中的经验:先用摄像头试一次,两次不成功就改成拍照上传。实时识别的失败率明显高于静态图,尤其在条码印刷质量差的时候。
另外注意,两种方式都支持一维条码与二维码,但依赖的解码能力不同——摄像头识别在支持原生解码器的浏览器上能覆盖一维条码,在不支持的浏览器上会回退到只能解二维码的引擎。如果摄像头扫不出一维条码但传图可以,原因就在这里,换浏览器或直接用传图即可。
二、常见码制的覆盖范围
日常遇到的码制基本都在支持列表里:
| 类别 | 码制 | 常见用途 |
|---|---|---|
| 二维码 | QR Code | 网址、支付、添加好友、电子票 |
| 商品条码 | EAN-13、EAN-8、UPC-A、UPC-E | 商品包装,超市结算 |
| 物流仓储 | Code 128、Code 39、Code 93、ITF | 快递单、仓储编号、内部物料 |
| 医疗图书 | Codabar | 血库、图书馆旧系统 |
不在支持范围的主要是这几类:PDF417(护照、登机牌、发票)、Data Matrix(电子元器件、药品监管码)、Aztec(部分车票)。看到方格子或者多层堆叠的码,先怀疑是这两种——它们有各自的生成场景,识别也要专门工具。
三、识别不出来时排查什么
按这个顺序查,比盲目重拍快:
- 确认码制被支持。 方格子、多层堆叠的直接放弃,换对应工具。
- 看清晰度。 条码最少的那一条要能分辨出黑白,糊成一片就没戏。上传图片时优先用原图,别用被压缩过的截图。
- 看静空区。 条码四周必须留有足够空白( Quiet Zone ),紧贴边框或和其他图文挤在一起会识别失败。这是印制不规范最常见的问题。
- 看反光与阴影。 覆膜、高光纸张会让局部白块变成灰块。稍微调整角度,或者避开光源直射。
- 看倾斜与变形。 一维条码对倾斜特别敏感,贴在曲面(瓶子、圆管)上的尤其难扫。尽量正对拍摄。
还有一类是条码本身损坏——磨损、撕裂、被遮挡。纠错等级高的二维码能容忍部分损坏,一维条码没有任何纠错能力,坏一条就全废。
四、识别结果怎么用
识别出来通常得到三类信息:
- 纯网址:QR 码最常见,识别出来就是完整 URL。注意识别结果和「点击后跳转到哪」是两回事——短链和服务端跳转你从码里看不出来。
- 编号类字符串:快递单号、物料码、序列号,通常是数字字母组合。这类码的校验位可以核对,工具会给出提示。
- 结构化内容:二维码可以存 vCard、Wi-Fi 配置、地理位置等,识别结果会带格式标识。遇到不认识的格式别直接当乱码。
安全性上提一句:识别和解析都在浏览器本地完成,图片不上传。涉及内部物料码、未公开的票据时,这一点比方便更重要。
五、识别和生成是两个问题
常有人把「扫不出」归因于生成端的问题,这确实有可能,但要分开排查:
- 生成端决定码的纠错等级、尺寸、静空区、印制精度。
- 识别端决定图像质量、码制支持、解码引擎。
如果一批码都扫不出,大概率是生成或印制的问题(尺寸太小、静空区不足、纠错等级太低、印刷模糊),该回头改生成参数。生成侧怎么调,见条码与二维码怎么选怎么印。
常见问题
扫出来是一串数字,能查出是什么商品吗?
不能直接查。条码只编码数字本身,不含商品信息。要知道对应商品,需要另外接入商品数据库——多数公开的条码查询服务靠用户提交数据,覆盖并不全。条码识别的价值在于拿到这串号,之后的查询是另一件事。
为什么手机相机扫得出,工具扫不出?
手机相机App通常接了多套解码引擎和云端能力,容错更强。浏览器工具受限于可用的解码库,遇到极端情况会失败。先用拍照上传的方式试,通常能补上这个差距。
一维条码和二维码能同时识别吗?
可以,识别时不限码制,画面里有一维条码就按一维条码解,有二维码就按二维码解。但一次只针对一个目标,画面里堆了多个码时要分开扫。
识别的结果会保存吗?
不会。解析在本地完成,不经过服务器,也没有历史记录。关掉页面就没了,需要的话自己复制保存。