在线条形码生成器,免费
生成主流格式的条形码。自定义并以 PNG 或 SVG 下载。
条形码简史
条形码是一项已有 77 年历史的技术,且有一个明确的发明瞬间。1948 年,费城 Drexel Institute of Technology 的院长无意中听到研究生 Bernard Silver 与一家本地连锁食品公司的总裁讨论收银台上自动读取产品数据的难题。院长拒绝了这一请求,但 Silver 把这个想法带给了他认识的一位 27 岁的讲师 Norman Joseph Woodland,一位前童子军,对莫尔斯码相当熟悉,又带着工程师特有的不安分。Woodland 当年冬天从 Drexel 辞职,搬到祖父位于 Miami Beach 的公寓。1949 年初的一个下午,他漫不经心地把四根手指划过沙子时,答案浮现出来:把莫尔斯码的点和划向下拉伸,就会得到一系列粗细不一的条带,光束扫过它们便能产生可解码的脉冲。他在沙上的第一幅草图不是平行线,而是一组同心圆,一种「牛眼」图案,从任何方向都能扫描。Woodland 与 Silver 于 1949 年 10 月 20 日提交专利,并于 1952 年 10 月 7 日获得授权,编号为 美国专利 2,612,994,「Classifying Apparatus and Method」,提议的读取装置基于一只 500 瓦白炽灯泡。该专利在商业上并不可行:以消费者价位读取所需的激光与光电二极管当时还不存在。两位发明人于 1962 年将专利以 15,000 美元卖给了 Philco。次年,Silver 在一场车祸中去世,年仅 38 岁,没能等到任何一只条形码扫过任何一件商品。
突破来自二十年后。IBM 位于北卡罗来纳州 Research Triangle Park 实验室的 George Joseph Laurer 提出了一种矩形替代方案(用竖向条纹代替同心圆环),这就成了 Universal Product Code(UPC)。Symbol Selection Committee 于 1973 年 4 月 3 日采用了 IBM 的设计。第一次商业 UPC 扫描发生在 1974 年 6 月 26 日,俄亥俄州特洛伊的 Marsh Supermarket:一包 67 美分的 10 条装 Wrigley's Juicy Fruit 口香糖,由收银员 Sharon Buchanan 在一台由 NCR 制造的扫描器上滑过,递过来的人是 Clyde Dawson,制造该设备的 National Cash Register Company 的高管。那块包装纸如今保存在 Smithsonian Museum of American History。十年之内,UPC 扫描在美国食品零售业里随处可见,1976 年,欧洲零售商联盟采用了 EAN-13(European Article Number,在 GS1 术语里现称 GTIN-13),同样的格式、多了一位国家前缀,今天是北美以外的世界标准。整个现代条形码生态(超市收银、运输标签、图书馆图书、医院腕带、会议徽章、资产追踪)都源自迈阿密海滩上的那四条线。
主要的 1D 条形码格式
- UPC-A(Universal Product Code,1973)。12 位数字、含一位校验位;美加地区占主导地位的零售条形码。编码一个由 GS1 分配的厂商前缀和一个产品编号。是世界上被扫描次数最多的条形码格式。
- EAN-13(European Article Number,1976/1977)。13 位数字、含一位校验位;北美以外零售产品的国际标准。多了一位国家前缀(或 ISBN/ISSN/JAN 的行业前缀,日本的 Japanese Article Number 其实就是国家前缀为 49 或 45 的 EAN-13)。UPC-A 条形码在技术上等同于前面加 0 的 EAN-13;现代 POS 系统将二者互换处理。
- EAN-8(1976)。8 位数字;用于完整的 EAN-13 装不下的非常小的产品(口香糖、口红)。国家代码 + 序列号 + 校验位。
- Code 39(Intermec,1974)。字母数字(大写 A-Z,数字 0-9,再加上
- . $ / + % *和空格)。老牌工业条形码(驾照、军用装备标签、医院腕带。数据密度低于 Code 128(每个字符约 9 个宽-或-窄条)且没有内置校验位。设计上自带自校验)每个字符都以一个条开始和结束,因此单次误读在结构上是可被检测的。ISO/IEC 16388。 - Code 128(Computer Identics, 1981)。完整 ASCII(128 个字符再加四个功能码);带强制校验位的高密度变长格式。三个子码:A(控制字符 + 大写 + 数字)、B(大写 + 小写 + 数字)、C(一对数字编码为单个字符(“12”是一个字符,宽度只有原来一半)。是全世界运输标签的主导格式)UPS、FedEx、DHL 与 USPS Priority Mail 的标签都是 Code 128。ISO/IEC 15417。
- ITF-14(Interleaved 2 of 5)。恰好编码 14 位数字;GS1 用于运输纸箱 GTIN(装零售产品的箱子)的标准。高密度数字,把每两个字符的条与空交错排列,每位数字大约对应 4 个宽-或-窄元素。永远是 14 位数字,因为 GS1 把 GTIN-14 的长度标准化为这个数字。ISO/IEC 16390。
- Codabar(1972)。数字加 6 个字母(A-D 作为开始/结束字符);历史上由 FedEx、血库、照片冲印店和图书馆借还系统使用。如今大多属于遗留方案,新应用使用 Code 128 或 Code 39。
- Pharmacode(Laetus Pharmacode)。仅数字,范围 3 到 131,070;由 Laetus GmbH 用于药品包装的生产线核验。设计上可在高线速下从任意方向被机器读取。属于细分领域,但在欧洲制药制造中是标准。
校验位,抓住误读的那点数学
大多数零售条形码都包含一位由前面数字算出的最终校验位。这套数学能抓住单一数字的误读(最常见的扫描错误)以及大多数相邻数字的换位。UPC-A 与 EAN-13 使用模 10 算法:从右起,将每位数字交替乘以 1 和 3(UPC-A)或 3 和 1(EAN-13),把乘积相加,对结果取模 10,再用 10 减,结果就是校验位(若模为 0 则为 0)。对于 UPC-A 编码 03600029145,校验位是 7,于是可口可乐罐子上完整的就是 036000291452。Code 128 使用更复杂的、含起始字符的模 103 加权和。Code 39 在设计上自校验(每个字符的条码模式在结构上是无歧义的),但可选地为高置信度应用增加一位模 43 校验位。Pharmacode 没有校验位,它依赖于自身有限的取值范围和生产线的上下文。本工具会自动计算校验位;你既可以输入原始负载(工具会附加校验位),也可以输入完整的“负载+校验位”(工具会校验它)。
静默区,条码周围需要留白
每一个 1D 条形码都需要在左右两边各留一段最小的留白,也就是静默区。标准要求是每一侧至少为最窄一条的宽度的 10 倍(在条形码规范中记作“X”)。没有静默区,扫描器就无法可靠地分辨条形码从哪里开始、到哪里结束;条形码的起止图案在被真正空白衬托时才设计为不可能被误认。最常见的生产失败是为了节省版面,把条形码挤到彩色边缘或另一个标签元素旁边,破坏了静默区。GS1 规范按符号体系和 X 维度强制规定静默区宽度;在校验时未通过静默区检查就意味着条形码在零售环境中无法被可靠扫描。本工具会自动给出合规的静默区,PNG 与 SVG 输出都包含所需的边距。
JsBarcode,背后的库
本工具使用 JsBarcode(Johan Lindell,MIT 许可,约 5k GitHub 星标),这是使用最广泛的开源 JavaScript 条形码库。JsBarcode 支持 CODE128、EAN(8/13)、UPC、CODE39、ITF-14、MSI、Pharmacode 与 Codabar;可以渲染为 SVG、Canvas 或 HTML img;以一个 60 KB 的单文件压缩 bundle 的形式分发。它完全在浏览器中运行(没有服务器、没有上传)而这正是本工具所依赖的隐私属性。这里加载的具体版本是 JsBarcode 3.11.6(包含全部符号体系的 bundle),并通过 Subresource Integrity(SRI)哈希钉死,使得攻击者即便攻陷了 CDN 也无法替换为别的版本。这个库被广泛用于 WordPress 插件、标签打印工具、餐饮 POS 系统以及小型企业的库存应用;也正因为它的存在,“免费的浏览器内条形码生成器”才有可能成为一个可行的产品。
GS1,真正的零售条形码从哪里来
GS1(Global Standards 1)是非营利性的标准化机构,维护着 UPC、EAN、GTIN-13/14、GLN(Global Location Number),以及运输中使用的 GS1-128 Application Identifier 体系。GS1 在全球有大约 117 家国家级会员组织,覆盖超过 150 个国家;制造商在本国 GS1 组织登记、缴纳每年的授权费(费用根据公司营收和产品数量分级),获得一个唯一的厂商前缀,这个前缀就成为该公司每件产品的 GTIN 的开头几位数字。这意味着:如果你想让一个 UPC 或 EAN 真的能被零售商扫描并识别为你的产品,你需要 GS1 会员资格。在这里用任意数字生成的条形码看起来像 UPC、也能被扫描识别为 UPC,但厂商前缀并没有登记到你名下,零售商的 POS 可能将其标记为未知商品或拒绝接受。对于内部资产追踪、图书馆目录、会议徽章、教室标签等非零售用途,GS1 这个问题就不必考虑,你想生成什么数字都可以。
常见用例
- 零售产品贴标。真实的 UPC/EAN,但厂商前缀需要 GS1 会员资格。
- 资产标签。办公设备、图书馆图书、实验室样品、博物馆藏品的内部库存编码。带自定义前缀的 Code 128 是事实标准。
- 运输标签。带 GS1 Application Identifiers 用于序列化的 Code 128,或用于外箱的 ITF-14。
- 会议徽章。参会者在每个会场扫描入场;徽章上通常编码注册 ID。Code 128 或 Code 39 都很合适。
- 活动票务。电影票、演唱会门票、体育比赛门票,编码座位分配和一个唯一的交易 ID。
- 小型企业库存。Etsy 卖家、独立书店、复古店都用 Code 128 做内部 SKU,不用支付 GS1 会员费。
- 课堂与图书馆借还。Code 39 在历史上是图书馆系统的默认选择(可追溯到 1970 年代),很多老的图书馆编目系统至今仍然要求 Code 39。
如何选择合适的格式
对于通用用途(资产标签、内部库存、会议徽章),选 Code 128(完整 ASCII、高密度、各处通用。对于在商店里销售的零售产品,选 UPC-A(美加)或 EAN-13(其他地区))并记得你需要一个 GS1 注册的厂商前缀。对于运输外箱,选 ITF-14(装零售产品的外箱的标准)。在物流和军方等仍由现有系统强制使用 Code 39 的应用里,选 Code 39。对于完整 EAN-13 装不下的小尺寸产品,选 EAN-8。Pharmacode 属于细分领域,你如果需要它会自己知道。“默认 Code 128”这条规则覆盖了大多数非零售用例。
PNG 还是 SVG,选对输出格式
SVG 是用于打印、以及任何条形码可能被缩放的场景下的正确选择。SVG 是基于矢量的:从标签上 1 厘米的小图到 50 厘米的大幅广告,条的宽度都保持锐利。文件是纯 XML(单个条形码通常 2-5 KB)可以内嵌在 HTML 中、可以在矢量设计软件(Illustrator、Inkscape、Affinity Designer)中打开,也可以无损地交给商业印刷厂。PNG 是用于尺寸固定、且对方不支持 SVG 的数字场景下的正确选择:邮件、老旧的 POS 软件、需要光栅图的桌面标签打印应用。这里 PNG 输出按 2× 分辨率渲染以获得视网膜级清晰度;文件通常 5-15 KB。一般规则:要打印就选 SVG;要发邮件或粘进老的应用就选 PNG。
隐私:为什么“仅在浏览器”在这里很重要
条形码本身不是秘密,但被编码的值常常是。内部资产编码会暴露组织结构。运输标签会暴露供应商关系和客户地址。图书馆借阅码会暴露读者的阅读模式。在服务器上生成条形码意味着这些值会跨越网络,最终落到服务器日志里。本工具通过 JsBarcode 把所有事情都放在你的浏览器里完成,你可以在点击“生成”时打开开发者工具的网络标签页查看,或者在页面加载完成后让它离线(飞行模式),工具仍然能用。对内部 SKU 标签、资产追踪码、会议徽章生成,或任何你不希望被复制到陌生人硬盘上的条形码值,都是安全的。
常见问题
我应该用哪个格式?
Code 128 是通用情况下最稳妥的默认选择(完整 ASCII、高密度、对每一款现代扫描器都适用。零售产品条形码请选 EAN-13(国际)或 UPC-A(美加))但记住,要让厂商前缀有效,你需要 GS1 会员资格。物流、军方或仍要求 Code 39 的图书馆系统选 Code 39。运输外箱选 ITF-14。非常小的产品选 EAN-8。Pharmacode 属于制药领域的细分使用。
我可以用这些条形码销售产品吗?
用于内部使用、资产追踪、会议徽章及类似的非零售用途,可以,自由使用。要在零售门店出售并由 POS 扫描、在零售商主商品档案中查询的产品,你需要一个真实的、由 GS1 注册的厂商前缀。没有它,这里生成的 EAN-13 或 UPC-A 仍能被正确扫描(格式有效),但这些数字不会登记在任何零售商的系统里属于你,POS 会把它标记为未知商品。GS1 会员费根据公司规模和产品数量大致从每年 250 到 1000 美元不等。
PNG 还是 SVG,下载哪一个?
要打印的就选 SVG(基于矢量、可完美缩放到任意尺寸、能在 Illustrator/Inkscape/InDesign 中干净打开、被商业印刷厂接受)。要数字使用且尺寸固定、目标端不支持 SVG 的就选 PNG(老的 POS 应用、会剥离 SVG 的邮件客户端、简单的网页内嵌)。PNG 按 2× 分辨率渲染以获得视网膜级清晰度;SVG 是 2-5 KB 的纯 XML。
什么是“静默区”?我需要自己加上吗?
静默区是任何 1D 条形码左右两边都需要的留白(每一侧至少为最窄一条的宽度的 10 倍。没有它,扫描器就无法可靠地辨识条形码的起止位置。本工具会在 PNG 与 SVG 输出中自动包含合规的静默区。最常见的生产失败是为了节省空间,把打印的条形码挤到另一个标签元素旁边,破坏了静默区)做标签排版时请把这些边距留出来。
UPC-A 与 EAN-13 有什么区别?
UPC-A 是 12 位数字,是美加的零售标准(1973 年引入,1974 年 6 月 26 日在俄亥俄州特洛伊的 Marsh Supermarket 完成首次商业扫描)。EAN-13 是 13 位数字,1976/1977 年起在国际上被采用。在前面加一个 0,12 位的 UPC-A 就可以表达成 13 位的 EAN-13,大多数现代 POS 系统对二者透明地处理。EAN-13 中那一位多出来的数字是国家代码前缀(美加 = 0、法国 = 30-37、德国 = 40-44、英国 = 50、日本 = 49 或 45 等)。如今二者都在 GS1 GTIN 体系之下。
我的条形码值会被上传吗?
不会。生成完全在你浏览器里的 JsBarcode 中运行。你输入的值永远不会跨越网络,你可以在点击“生成”时打开开发者工具的网络标签页查看,或者在页面加载完成后让它离线(飞行模式),工具仍然能用。对内部 SKU 编码、资产追踪 ID、会议徽章数据,或任何你不希望被复制到陌生人硬盘上的值,都是安全的。