使用方法
打开页面时三个输入都已填好默认值:数量 5、种子 20261108、前缀 SF/YT/ZTO/JD/EMS,结果区也直出了这 5 条示例单号,不必先点按钮就能看到一批完整结果。想生成自己的数据,改这三个输入即可:数量与种子是数值框,按裸 Enter 立即重算;前缀是多行文本框,每行写一个前缀,按 Ctrl/Cmd + Enter 重新生成,也可以边改边看结果实时刷新。数量允许 1~100、种子允许 1~2147483647、每行前缀只允许 1~6 位字母或数字;留空、填文字、填小数、超范围、前缀含非法字符,都会给出具体报错,不会静默归零。
结果区分两部分:上方是带 role="alert" 的单号清单,每条给出完整单号、12 位主体与校验位,可一键复制;下方的校验位复算区把 5 组典型主体逐个代入加权模 10 公式,展示检错能力与它的盲区。再往下是 12 行结构与复算对照表,点「加载更多」展开到 14 行,可导出带 BOM 的 CSV 或按 TSV 复制。
开始之前请先接受一条边界:快递单号数字生成器只是测试数据的格式模拟,不是任何真实承运商的编码规则,生成的单号不能用于寄件、报销或查件。把它当「一批长得像单号的字符串」来用,才不会用错地方。
这个工具能解决什么问题
写表单校验、导入脚本、列表分页、边界值测试、演示截图或压测样本时,经常需要一批「格式像单号」的数据。用真实单号既不合适也有隐私风险,纯随机数字又看不出结构,快递单号数字生成器给的是中间那一档:有固定前缀、有连续主体、末尾还有一位能通过公式复算的校验位,既能填满字段宽度,又方便写断言。第二个用途是可复现:固定种子决定整批结果,同一个种子跑多少次都是同一批单号,测试用例失败时可以原样回放,不用把上一次的随机输出先存下来。
本页不做这些事:不生成任何真实可查的运单号、不接承运商接口、不校验你手上单号的真伪、不推断包裹状态,也不联网。前缀里的 SF、YT、ZTO、JD、EMS 只是示例标签,不对应任何公司的真实编码;校验位也只是下面要讲的简单加权模 10,不是任何真实物流体系用的算法。它只回答一个问题:给定数量、种子与前缀集合,按这套结构化规则,一批测试单号长什么样。
与随便生成一串数字相比,结构化编号的价值在于可测:前缀可枚举、主体长度固定、末位可复算。也正因为它只是模拟,别把它接到生产环境当真实单号源。
生成原理与变量
单号是三段拼起来的:前缀 + 12 位主体 + 1 位校验位。前缀从你填的列表里取;主体是 12 位十进制数字,逐位由固定种子随机数产生;末位校验位由主体算出来,不是随机的。完整单号形如 SF6201064831076:前缀 SF、主体 620106483107、校验位 6。
校验位用加权模 10:从主体第 0 位起,偶数位置乘权重 3、奇数位置乘权重 1,逐位求和得 sum,再取 cd = (10 - sum%10)%10。写成式子是 sum = Σ 数字_i × (i%2===0 ? 3 : 1)。例如主体 123456789012 算得校验位 0;把最后一位改成 3,即 123456789013,校验位变成 9,说明单字符错误能被检出;把相邻两位交换成 123456789021,校验位 8,也能检出,因为交换的两位权重不同。
随机数用统一的固定种子发生器:s=(Math.imul(s,1103515245)+12345)&0x7fffffff,每次返回 u = s / 2147483647,取词用 Math.floor(u * len)。生成一条单号时先连续取 12 次得到主体的每一位,第 13 次才用来从前缀列表里挑前缀——这个先后顺序会改变整批结果,把取前缀挪到主体之前就复现不了示例。批量生成还要用集合去重:随机不等于唯一,撞到已生成的单号就丢弃重试,并设 n × 100 次尝试上限,仍凑不够就明确报错,而不是交出一批带重复的结果。
简单加权模 10 有一个经典盲区:当相邻两位数字相差 5 时交换它们,加权和的变化恰好是 10 的倍数,模 10 后不变,于是校验位相同、错误检不出。273456789012 与 723456789012 的校验位都是 2,就是这个原因。Luhn 算法隔位乘 2 再按位求和,检错能力更强;本页只把这一点作为对照说明,不重写 Luhn 页。所有计算都是整数与字符串拼接,没有浮点舍入,主体里的前导零也会原样保留。
完整示例(固定种子 20261108)
数量 5、种子 20261108、前缀列表 SF/YT/ZTO/JD/EMS、主体 12 位,页面算出这 5 条:
SF6201064831076:主体 620106483107,校验位 6。SF7565352457704:主体 756535245770,校验位 4。JD0066092832093:主体 006609283209,校验位 3,开头两个 0 保留。YT6490413655535:主体 649041365553,校验位 5。YT1595635926173:主体 159563592617,校验位 3。
校验位复算同样由页面代入公式现算:123456789012 → 0、123456789013 → 9、123456789021 → 8、273456789012 → 2、723456789012 → 2。最后两个校验位相同,正是「差 5 交换检不出」的实证。这些结果都不是写死在页面里的答案;把种子换成别的数、把数量调到 12、把前缀列表改一改再按回车,结果区会整批重算,对照表里的规则数据也来自同一套算法。
想验证「固定种子可复现」,把种子改回 20261108、数量改回 5、前缀还原成默认 5 行再生成一次,会重新得到完全相同的 5 条——点「还原示例」按钮就是做这件事。
输入范围与对照表
对照表默认 12 行,前 5 行是固定种子那批单号的结构拆解,接着 5 行是校验位复算的典型输入与结论,最后 2 行是前缀集合与权重规则;点「加载更多」再展开主体位数 12 位与固定种子 20261108 这两行,共 14 行。四列依次是示例、主体或输入、校验位、完整单号或结论,表可导出带 BOM 的 CSV,Excel 打开不乱码,也可按 TSV 复制粘进表格软件。
这张表是参考数据,不是当前这批生成结果的逐条清单;随输入变化的是上方结果区与校验位复算区。数量 1~100、种子 1~2147483647、前缀每行 1~6 位字母或数字;数量填小数、种子超限、前缀含空格或标点,都会弹出具体报错,方便你一眼看出是哪一项没填对。
结果边界与精度说明
- 只是测试数据,不是真实单号。本页是测试数据的格式模拟,不是任何真实承运商的编码规则,生成的单号不能用于寄件、报销或查件,也不能用来查询真实物流;这一条在结果区下方也用醒目提示单独标出。
- 前缀只是标签。SF、YT、ZTO、JD、EMS 只是示例字符串,不对应任何公司编码,换成本项目自己的前缀同样能生成。
- 校验位不是通用标准。它只是权重 3/1 交替的简单加权模 10,不是 Luhn,也不是任何真实物流校验算法;能检出多数单字符错误,但检不出相邻两位差 5 的交换。
- 随机不等于唯一。批量用集合去重重试,重复就补生成;尝试次数设了上限,凑不够会明确报错而不是交出带重复的批次。
- 种子决定整批。同一种子、数量与前缀列表结果完全一致;改任一项都会让后续序列整体变化,这就是固定种子可复现的含义。
- 前导零保留。主体按字符串拼接,006609283209 这类以 0 开头的主体不会被当成数字丢掉前导零。
- 没有浮点舍入。取词用 Math.floor,校验位是整数取模,输出精确到字符;纯前端计算,不发起网络请求,也不写 Cookie 或本地存储。
常见问题
生成的单号能拿去寄件或查物流吗?
不能。本页只是测试数据的格式模拟,不是任何真实承运商的编码规则,生成的单号不能用于寄件、报销或查件,也不能用来查询真实物流。它只保证字符串「长得像结构化单号」,与真实运单系统没有任何关系,请勿把它接到生产流程里。
为什么每次点生成结果都一样?
因为默认用的是固定种子 20261108。固定种子让整批结果可复现,方便测试用例回放;把种子改成别的整数,主体序列与前缀选择都会整体改变。想回到示例批次,把种子改回 20261108、数量 5、前缀还原成默认 5 行即可,或点「还原示例」。
末尾那位校验位是怎么算的?
用加权模 10:从主体第 0 位起,偶数位乘 3、奇数位乘 1,逐位求和得 sum,再取 cd=(10-sum%10)%10。比如 123456789012 得 0,改成 123456789013 得 9,所以单个数字写错会被发现。它是本页自定义的简单规则,不是任何真实物流算法。
主体开头的 0 会不会被丢掉?
不会。主体是逐位生成后用字符串拼起来的,不是当数字解析,因此 JD0066092832093 里开头的两个 0 会原样保留。这点对测试固定宽度字段很重要:如果代码把单号整体转成数字,前导零反而会在那一步丢掉,那是调用方的问题,不是本页生成的。
批量生成为什么还要去重?
因为随机不等于唯一。数量大或前缀种类少时,有可能两次生成出完全相同的单号,本页用集合记录已生成的完整单号,撞车就丢弃重试、补到目标条数为止;同时设了 n×100 次尝试上限,真凑不够会明确报错,而不是悄悄交出一批带重复的结果。
为什么说「差 5 交换」检不出?
因为相邻两位的权重是 3 和 1,当这两个数字相差 5 时交换,加权和的变化是 5×(3−1)=10,正好是 10 的倍数,模 10 后不变,校验位也就相同。273456789012 与 723456789012 的校验位都是 2 就是例子。Luhn 隔位乘 2 再按位求和能避开这类盲区,检错更强,本页只做对照不重写。
SF、YT、ZTO、JD、EMS 是真实公司吗?
不是。它们只是默认示例里的 5 个标签字符串,用来演示「前缀可选、可枚举」,不对应任何真实承运商的编码,也不代表这些公司存在某种编号规则。你可以在前缀框里每行写自己的标签,只允许 1~6 位字母或数字,写别的同样能生成。
我填的种子和前缀会被上传吗?
不会。随机数、加权求和与字符串拼接全部在当前浏览器里执行,页面不发起任何网络请求,也不写 Cookie 或 localStorage。你在开发者工具的 Network 面板里反复改种子、点几次生成,面板始终是空的;关掉页面数据也不留存。