这里生成的条形码能直接拿去卖货吗?
号码是你申请来的才行。 本页画出的图形是正确的、能扫出来,但里面那串**号码**必须先由 GS1 成员组织(中国大陆是中国物品编码中心)分配给你,零售系统才会认。随便编一个以已注册前缀开头的号,有可能和别人已分到的号撞车。货架、货位、资产、工单这类自用标签不需要任何分配,直接用 Code 128。
在线免费生成 EAN-13、UPC-A、Code 128、Code 39 等 15 种条形码,导出无损 SVG 或高清 PNG。输入 12 位自动补校验位;末位写错会直接告诉你应该是几,并一键改好。支持批量生成打包下载。
校验不通过的行会连同原因一起写进 ZIP 里的 skipped.txt。
能在零售渠道流通的条形码,其号码须由 GS1 成员组织(中国大陆为中国物品编码中心)分配。本工具只画图形,不分配号码;自用标签无需申请。
由构建 Go Tools 编码类工具的开发者撰写与复核。页面上的模块数、校验位算式与编码器行为,都是对着真实运行的引擎量出来的,而不是抄自别人的二手总结。
号码是你申请来的才行。 本页画出的图形是正确的、能扫出来,但里面那串**号码**必须先由 GS1 成员组织(中国大陆是中国物品编码中心)分配给你,零售系统才会认。随便编一个以已注册前缀开头的号,有可能和别人已分到的号撞车。货架、货位、资产、工单这类自用标签不需要任何分配,直接用 Code 128。
都可以。 第 13 位是由前 12 位算出来的校验位,所以两种都能输。输 12 位会替你补上并明确告诉你补的是几;输 13 位会被验证,对不上时直接指出应该是几。
不是。 690–699 以及 680–681 确实是 GS1 China 管理的前缀段,489 是香港、471 是台湾、958 是澳门。但 GS1 自己明确说明:成员企业可以在世界任何地方生产,也可以向自己选择的任一成员组织申请前缀,所以前缀标识的是**谁发的号**,不是货从哪来。
多半是静空区,或者图被缩放过。 按发生频率排:静空区被标签边缘或边框切掉了;图片在排版软件里被缩放过,一个模块不再是整数个打印 dot;模块宽度对该扫描器和该打印分辨率来说太小。三件事都在打印之前就定了,而且本页都会显示出来。
一维条形码是一串字符的游程编码:每个字符对应一组固定的条与空,宽度以模块为单位——最窄那根条的宽度,记作 X。Code 128 每个符号占 11 个模块,所以九个字符的串宽 134 个模块,因为总数是 11 × (字符数 + 2) + 13:一个起始符、一个校验符,加上 13 个模块的终止符。
真正让自制条码失败的两样东西,看上去都像空白。一是静空区,也就是两侧的空白边距;扫描器靠它找到条码的边界,logo 或表格线伸进去,整个码就读不出来了。二是零售码制里的校验位,由前面几位算出来的一位数字,作用是让扫描器在读错时直接拒绝,而不是报出一个错误的商品号。
Code 128 text = "HELLO-123" symbols = 1 (start) + 9 (data) + 1 (check) = 11 modules = 11 × 11 + 13 (stop) = 134 X = 3px = 402 px + quiet zone 10X + 10X = 462 px
每一位的数字、权重、乘积,加权和,以及取模那一步。贴进 13 位而末位不对时,页面直接指出它应该是几,并给一个一键改好的按钮——而不是回你一句「无效」。
不只是表格里的一个数字。规范要求的空白边距会在预览上用浅色块标出来,而且规范不对称的地方我们也不对称——EAN-13 要求左 11X、右 7X,不是两边都 10X。
203dpi 下一个 dot 是 0.125 mm,300dpi 是 0.085 mm,600dpi 是 0.042 mm。面板会把你选的模块宽度换算成该分辨率下的毫米数,打印出来多大是个决定,不是个意外。
纯数字在子集 C 里两位压成一个符号,所以 8 位数字只要 79 个模块,逐字符编码则要 123 个——窄 35.8%。读数会显示实际走的子集和省下了多少。
EAN-13、EAN-8、UPC-A、UPC-E、ITF-14、交叉二五码、Code 128(含 A/B/C 子集)、Code 39、Code 93、Codabar、MSI、Pharmacode。全部由页面里的 JavaScript 画出来,任何内容都不上传。
一行一个值,按 SVG 或 PNG 打成 ZIP。校验不通过的行不会被悄悄丢掉——它们连同原因一起写进 skipped.txt,所以 100 个值只出 97 个文件时,你知道是哪三个、为什么。
npx bwip-js --bcid=ean13 --text=9780306406157 --scale=3 out.png 一套源自 BWIPP 的引擎,码制覆盖面目前最广——超过一百种,含二维码和邮政码——同时提供 CLI 和库两种形态。条码由构建流程生成、或需要本页未覆盖的码制时,值得用它。注意两点:不传 paddingleft/paddingright 就一个静空区都没有;height 的单位是毫米,不是像素。
python -m barcode ean13 9780306406157 -o out.svg 在 Python 流水线里很顺手,默认输出 SVG。覆盖 EAN/UPC 家族、Code 39 和 Code 128;更冷门的码制以及 GS1 应用标识符不在范围内。
同一个代码库既要生成又要识别时的常规选择。它出名的是识别那一半;就生成而言,码制覆盖面比 BWIPP 窄。
因为不需要任何工具而流行,也是扫不出来的标签的常见来源。Code 39 字体要你自己加 * 定界符,Code 128 字体要你自己算校验字符,而字体只会按文档里的字号渲染,模块宽度完全不受控。
它不是生成器,但如果条码要在零售渠道里流通,这一步没法跳过:号码由 GS1 成员组织分配,画条形码反而是容易的部分。仓库和资产这类自用标签则完全不需要申请。
978030640615
9780306406157 digit 9 7 8 0 3 0 6 4 0 6 1 5 weight ×1 ×3 ×1 ×3 ×1 ×3 ×1 ×3 ×1 ×3 ×1 ×3 product 9 21 8 0 3 0 6 12 0 18 1 15 sum = 93, 93 mod 10 = 3, check = (10 - 3) mod 10 = 7
权重是 3 和 1 交替,从 payload 最右一位开始数。教科书通常按「奇数位、偶数位」讲,那样每换一种长度就要换一个公式;从右往左数则一条规则通吃 EAN-13 的 12 位、UPC-A 的 11 位和 EAN-8 的 7 位。这个号码是一本已出版教材的 ISBN-13,答案可以拿实体书核对。
9780306406158
The last digit should be 7, not 8. [ Use 9780306406157 ]
底层编码器会直接拒绝这个号码——它抛出 ean13badCheckDigit。这没错,但没用:从包装上抄来的号码,「打错一位」远比「结构性错误」常见,而人真正需要的只有「那一位应该是几」。所以校验发生在调用编码器之前。
12345678
subset C: 4 symbols -> 79 modules subset B: 8 symbols -> 123 modules saving: 35.8%
子集 C 每个符号装两位数字。模块数遵循 11 × 符号数 + 35,所以符号数减半,宽度也几乎减半。这就是为什么自用编码值得保持纯数字——只要加进一个字母,整串就会被打回一个字符一个符号。
12345
12345 (5 digits) -> 79 modules 123456 (6 digits) -> 68 modules 12345678 (8 digits) -> 79 modules
子集 C 凑不成对的那一位没法压缩,于是奇数长度的数字串要多付一个子集切换符。结论相当反直觉,而且在设计编码规则之前知道很值:6 位比 5 位更窄,而 5 位和 8 位占的宽度完全一样。自用数字编码保持偶数位,等于白捡一截宽度。
X = 3 modules px, printer = 203 dpi
1 dot @ 203 dpi = 0.125 mm X = 3 dot = 0.375 mm EAN-13 symbol = 95 modules + quiet 11X + 7X = 113 X = 42.4 mm
热敏打印机只能落整颗 dot。按 1× 导出、再按同一分辨率打印,每个模块都正好是整数个 dot。事后在排版软件里缩放则不然:模块变成小数个 dot,打印机对每根条各自取整,条空比逐渐失真,直到扫描器开始读不出来。
零售商品用 EAN-13(小包装用 EAN-8,北美用 UPC-A),外箱用 ITF-14。仓库货位、固定资产、工单这类自用标签一律选 Code 128——不用申请号码,而且纯数字会被两位压成一个符号。
EAN-13 收 12 或 13 位,UPC-A 收 11 或 12 位,EAN-8 收 7 或 8 位;输入短的那种时校验位会替你补上。Code 128 与 Code 39 收变长文本。
选好模块宽度和你真正要用的打印机分辨率,面板会算出一个模块在该分辨率下是多少毫米。在排版软件里拖拽缩放图片才是扫不出来的主因,尺寸请在这里定。
SVG 放大到任何尺寸都不糊,标签软件也更认它;PNG 的 2× / 4× 留给不收矢量的地方。批量面板一行一个值,打包成 ZIP,被拒绝的行会连同原因一起附在包里。
13 位 EAN-13 里末位与前 12 位对不上,是现实中最常见的输入。被告知「那一位应该是几」只需要看一眼;被告知「无效」则要再去找一个校验位计算器。
9780306406158 -> 无效的 EAN-13
9780306406158 -> 末位应该是 7,不是 8
[ 用 9780306406157 ] 输入 12 位输出 13 位是你要的行为,但前提是你被告知了——否则印出来的号码和表格里的号码不一致,而没人知道该以哪个为准。
入:978030640615 出:条形码(13 位,只字未提)
入:978030640615 出:条形码 +「已自动补校验位 7」
编码器不会拦你。出来的东西能扫,但解码结果不是你输入的字,而且条码明显比字数该有的宽度宽得多。
Code 128 <- 订单(2 个字,134 模块——和 9 个 ASCII 字符一样宽)
Code 128 <- ORDER-2026-0042(ASCII,宽度与内容相称)
生成器默认根本不留边距。贴在窄标签的边缘上、或者被装进一个方框里,条码就失去了扫描器用来定位的那段空白,于是干脆读不出来。
|▐▌▐▐▌ ▐▌▐ ▌▐▐▌| <- 标签边缘紧贴着条
| ▐▌▐▐▌ ▐▌▐ ▌▐▐▌ | <- 左 11X、右 7X 保持空白
缩到一个「整齐」的物理尺寸,会让一个模块变成小数个打印 dot。打印机对每根条各自取整,条空比逐渐失真,条码是慢慢坏掉的——这比直接失败更糟,因为它能通过办公桌上的测试,却在现场出问题。
按 1× 导出,再在排版软件里缩到 38 mm
把模块宽度设成 300dpi 下正好 38 mm,按 1× 导出,100% 置入
C,奇数位被迫切换是 CB,含非数字字符是 B。(10 - 加权和 mod 10) mod 10。以 978030640615 为例,加权和是 93,所以校验位是 7。本页会把整个算式摊在输入框下面。同一条规则也适用于 UPC-A 的 11 位、EAN-8 的 7 位和 ITF-14 的 13 位——因为权重从右往左数,长度就无关紧要了。 skipped.txt 里,所以 100 个值只出 97 个文件时,你知道是哪三个、因为什么。整个过程都在浏览器里完成,批量的上限取决于你的机器,而不是服务器配额。 编码和格式化
完整 ASCII 码表:128 个字符的十进制、十六进制、八进制、二进制对照,支持字符转 ASCII 码、ASCII 码转字符双向转换。控制字符附各语言转义写法与终端 ^M 记法,并说明你会在哪儿真的遇到它。浏览器本地运行,不上传。
编码和格式化
免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。
编码和格式化
在浏览器中把 Base64 字符串或 data URI 解码还原为图片。预览、读取尺寸与 MIME,再下载为 PNG、JPG、GIF、SVG。无需上传。
编码和格式化
在浏览器中将 CSV 转换为 JSON。支持 RFC 4180、类型推断、表头行、大整数安全。100% 隐私,无需上传。
编码和格式化
粘贴乱码即可自动还原原文。工具枚举 UTF-8、GBK、Big5、Shift_JIS、EUC-KR 等编码组合并按可信度排序,标出哪一条经过往返校验、能逐字复现。同时提供各编码下的字节对照与 hex 反解。免费在线,全程在浏览器内完成,内容不上传。
编码和格式化
粘贴 .env 文件,立即得到 JSON。数据库密码、API 密钥和令牌绝不离开你的浏览器 — 100% 本地、零上传、免费的 dotenv 解析器。