随机UPC生成器

生成符合 UPC-A 规范的 12 位零售条码:先随机出 11 位前缀,再按「奇数位乘 3 加偶数位」的加权模 10 公式算出末位校验位。打开页面就已经填好一组示例,改数量或种子后按回车立即重算,结果可在下方表格里按 4 位分组查看、导出或复制。

一次最多生成 100 个;数量改变会立刻按当前种子重算整批。
填同一个种子会得到同一批条码,便于复现与对照;留空则按默认种子。

提示:数量框或种子框按裸 Enter 触发重算;勾选状态变化即时刷新分组显示。

UPC-A 生成对照表(前缀 + 校验位 + 完整 12 位)

序号11 位前缀校验位完整 UPC(每 4 位分组)
16201064831036201 0648 3103
27075653524517075 6535 2451
37701006609227701 0066 0922
48320976490428320 9764 9042
51365553215951365 5532 1595
65635926173275635 9261 7327
72524561736722524 5617 3672
86487048270066487 0482 7006
92853490775972853 4907 7597
104690952871904690 9528 7190
115158112171225158 1121 7122
128493679698098493 6796 9809

对照表由固定种子统一生成 18 组,默认显示前 12 行,点「加载更多」展开到 18 行;导出带 BOM 的 CSV 用 Excel 打开不乱码,复制 TSV 可直接粘进表格软件。

使用方法

本页把随机条码的生成做成可反复试算的小工具,打开就带一组非空示例,不必先输入就能看到完整结果。想生成自己的批量条码,只用调整两个数字框:第一个是「生成数量」,决定一次要多少条条码,范围 1 到 100;第二个是「固定种子」,决定这批随机数是怎么来的,同一个种子永远得到同一批条码,方便复现与团队对照。任意一个数字框里按回车键 Enter(不加 Ctrl、Cmd 或 Shift)就会立即重算,也可以直接点「生成条码」。

「显示方式」是一个勾选框:勾上时,结果区和表格里的 12 位数字会每 4 位插一个空格,例如 036000215182 显示成 0360 0021 5182,更接近收银小票和商品标签上的印刷样式;不勾时则输出连续数字串,适合直接喂给条码打印软件或数据库。勾选状态一变,结果区与表格会即时刷新,不需要重新生成。点「复制结果」把当前这一批条码收进剪贴板;点「载入示例」把数量和种子还原成默认样本。

下方对照表默认列出 12 行,每行给出序号、11 位前缀、末位校验位和完整 12 位(每 4 位分组),点「加载更多」展开到 18 行;可导出带 BOM 的 CSV,或按 TSV 复制整张表。结果区带 role="alert",读屏软件会朗读生成结果。每个输入框都给了 min、max、step:数量超出 1 到 100、种子不是正整数,都会弹出具体报错,不会静默当成 0 继续出数。

能解决什么问题

第一类需求是做条码格式与校验的演示和教学。很多人在学零售系统、库存管理或条码打印时,需要一个对照自己校验函数的样本。固定种子让演示可复现,全班算出来的是同一批条码,谁算错了一眼就能看穿。它输出结构合法、校验位正确的 12 位数字,可直接拿去验证你的 UPC-A 解析代码。

第二类需求是批量造测试数据。写条码扫描接口、做 EAN/UPC 校验中间件、压测入库流程时,常需要一大批「长得像真条码、但内容随机」的输入。逐条手敲既慢又容易把校验位算错;本页一次给几百上千个全带正确校验位的样本,且同一种子复现,方便回归测试时比对前后两次是否一致。

本页不解决这些事:它不绑定任何真实商品,不验证某段数字是否对应某个真实在售商品,也不能用于实际结算或贴到真实货品上。UPC-A 校验位防的是录入错误而非防伪;本页明确是格式与校验演示生成器,输出的条码仅供学习、测试和占位,不能当真实商品码用。

原理和变量

随机UPC生成器本质上是一个格式与校验演示工具,不绑定真实商品,只保证输出结构合法、校验位正确的 12 位数字。UPC-A 是北美通用的 12 位零售条码,最后一位是校验位。前 11 位承载商品与厂商信息(其中首位数字还有商品类别含义:0 是规则包装商品、2 是称重商品、3 是药品等),第 12 位是用前 11 位算出来的校验码。校验的目的很简单:扫描时如果某一位读错、或相邻两位顺序颠倒,重新算一遍校验位会对不上,于是立刻报错而不是默默收下错误数据。

校验位的算法是加权模 10。把前 11 位从左到右编号为第 1 到第 11 位,其中奇数位(第 1、3、5、7、9、11 位)权重为 3,偶数位(第 2、4、6、8、10 位)权重为 1。先求加权和:奇数位之和乘 3,再加上偶数位之和;把这个和记作 S。再取与 10 的差值补成 10 的倍数,得到校验位 cd = (10 - (S % 10)) % 10。注意末尾的 % 10 是为了让 S 正好是 10 的倍数时校验位等于 0,而不是变成 10。

用固定种子复现随机。本页的「随机」不是真随机,而是用一条可复现的线性同余公式:s = (Math.imul(s, 1103515245) + 12345) & 0x7fffffff,取数时取 Math.floor(s / 2147483647 * 10) 得到 0 到 9 之间的一个数字。每取一位就把种子推进一次,连续取 11 次就得到一条前缀;给定同一初始种子,每次算出来的前缀序列完全相同,所以「固定种子」勾选后生成的条码可跨机器、跨时间复现。

完整示例(逐步代入校验公式)

以本页内置校验示例走一遍完整链路。取前 11 位 03600021518:奇数位(第 1、3、5、7、9、11 位)是 0、6、0、2、5、8,和为 21;偶数位(第 2、4、6、8、10 位)是 3、0、0、1、1,和为 5。加权 S = 21×3 + 5 = 68,68 % 10 = 8,cd = (10 - 8) % 10 = 2。于是完整 12 位为 036000215182,分组显示 0360 0021 5182。

再验两个来自数据表的样本:前 11 位 12345678901,奇数位 1+3+5+7+9+1=26,偶数位 2+4+6+8+0=20,S=26×3+20=98,98%10=8,cd=(10-8)%10=2,得 123456789012;前 11 位 79000000001,奇数位 7+0+0+0+0+1=8,偶数位 9+0+0+0+0=9,S=8×3+9=33,33%10=3,cd=(10-3)%10=7,得 790000000017。三个样本校验位分别是 2、2、7,与数据表一致。

表格里每一行的校验位都不是写死在页面里的答案,而是把那一行的前 11 位代入同一条加权模 10 公式现算出来的;你清空种子框换成别的数字,整批条码会立刻按新种子重新生成,校验位随之重算。

对照表

对照表用固定种子生成 18 组 UPC-A,默认显示前 12 行,点「加载更多」展开剩余 6 行。每行给出 11 位前缀、末位校验位、以及完整 12 位(每 4 位分组)。举几组读数:第 1 行前缀 62010648310、校验位 3、完整 6201 0648 3103;第 6 行前缀 56359261732、校验位 7、完整 5635 9261 7327;第 12 行前缀 84936796980、校验位 9、完整 8493 6796 9809。

表格数据与上方结果区来自同一套生成逻辑:结果区按「生成数量」取前若干条,表格则固定展示 18 条供对照。导出与复制都取自同一份数组,不会漏掉屏幕上未展开的行。

与结果区的关系是:结果区回答「我这次要的 N 条条码是什么」,对照表回答「固定种子下整批 18 条长什么样」,两者独立但同源。

结果边界与舍入

常见问题

生成的条码能直接贴到真实商品上卖吗?

不能。本页只保证数字串结构合法、校验位正确,但前 11 位里并不包含真实有效的 GS1 厂商前缀,也不对应任何真实在售商品。把随机条码贴到真实货品上会导致结算、库存与扫码全部错位。本页明确定位是格式与校验的演示和测试工具,仅供学习、占位和回归测试使用。

为什么同一个种子每次都生成一样的条码?

这正是固定种子的设计目的。本页用线性同余公式 s = (Math.imul(s, 1103515245) + 12345) & 0x7fffffff 产生伪随机序列,给定同一个初始种子,每次推进得到的数字序列完全一致,于是前 11 位前缀和末位校验位都一模一样。好处是可以复现、可以对照、可以写进测试脚本做回归比对。

校验位公式里的奇数位、偶数位怎么编号?

从左往右数,第 1 位是奇数位、第 2 位是偶数位,依此类推到第 11 位(奇数位)。UPC-A 规定奇数位权重为 3、偶数位权重为 1,所以校验和是「奇数位数字之和 × 3 + 偶数位数字之和」。注意和日常口语里「第几个数字」一致,不要从 0 开始编号,否则会差一位、校验位整错。

校验位是 0 是不是出错了?

不是。当奇数位和乘 3 加偶数位和正好能被 10 整除时,(10 - 0) % 10 = 0,校验位就是 0。这是完全合法的 UPC-A 末位,页面会如实显示 0,而不是当成空或报错。例如默认对照表第 10 行前缀 46909528719 的校验位就是 0。

分组显示会不会改变条码本身?

不会。每 4 位加空格只是把 12 位数字 036000215182 显示成 0360 0021 5182,数字串本身不变。但复制结果时,复制到的就是当前看到的文本:勾选分组会复制到带空格的版本,取消勾选才复制到连续数字串,喂给条码软件前请确认你要的是哪一种。

数量和种子都留空会怎样?

数量留空时按默认 10 处理,种子留空时按默认 20261108 处理,页面打开即带这组非空示例。只有当你填了非法值(如数量 0、种子为负数或非数字)才会触发具体报错并停止生成,不会把坏输入悄悄当成 0。

校验位能防住故意篡改吗?

防不住。加权模 10 只针对「偶然录入错误」设计,知道算法的人完全可以任意改几位再反向算出能通过校验的末位。所以 UPC-A 校验位解决的是扫描录入的可靠性,不是商品的真实性与防伪;本页生成的条码也同样不具备防伪含义。

生成的条码会被上传或保存吗?

不会。从取随机、算校验到生成表格和复制到剪贴板,整条链路都在浏览器本地完成,不发起任何网络请求,也不写 Cookie 或 localStorage。关掉页面后,当前这批条码不会留存,下次打开仍是默认示例。

相关工具