使用方法
- 三个数字框分别是起始值、生成数量与步长,都写了 min、max、step。默认 1001、5、1,点开就能看到一段连续号。改完任意一个直接按 Enter 重算,不必去找按钮。
- 下方多行文本框是 Luhn 校验框:每行贴一个「原始号加一位校验位」的完整号,脚本会重算前几位的校验位并与末位比对,报「通过」或「不通过」。它默认已经直出三行合法完整号;多行输入约定 Ctrl/Cmd + Enter 触发。
- 结果区带 role="alert":五张卡片给出生成个数、首个号、末个号、首个校验位与校验框通过数,下面
<pre>逐行打印连续号清单、每个号对应的完整号、标准样例的校验过程,以及校验框每一行的判定。 - 点「复制结果」取走整段快照;「导出对照表 CSV」下载带 BOM 的表格;「复制对照表 TSV」把 16 行号段按制表符复制。对照表默认只显示 12 行,点「加载更多」展开其余 4 行。
- 想恢复默认,点「载入示例」:三个数字框与三行校验样例会一起还原并重新实算,不需要手动逐格改回去。
生成、加校验位、校验三段全部在浏览器内完成,不发起网络请求、不写 Cookie、不碰 localStorage,也不需要连数据库查重。
这个工具能解决什么问题
第一,批量产出可按顺序归档的单据号。出库单、工单、报修单、发票流水号这类内部凭证需要「连着、不跳号、能看出先后」,用起始值加步长生成等差数列最省事,也方便事后核对有没有缺页。
第二,让人工录入的错字当场暴露。号一旦被手敲进表单,最常见的两种错是某一位数字敲错、以及相邻两位前后颠倒;本页给每个号附一位 Luhn 校验位,不联网、不查库就能判出这两类错误,把错误拦在录入阶段而不是对账阶段。
第三,把「连续号」和「兑换码」分清楚。序列号数字生成器这一名称里的「序列」已经点明了关键性质:号是连着的、可预测的,任何人拿到一张就能推出下一张。所以它能用于内部归档,却绝不能拿去做优惠券码、礼品卡号或任何承载权益的凭证;那种场景需要的是不可预测的随机串。旧占位脚本曾把本页做成从词表里随机拼单词的通用生成器,与本页要做的连续号毫无关系,本页不沿用那套逻辑,只做等差数列与校验位。
边界也说清楚:本页不查重、不保证全局唯一、不写数据库、不做加密,也不生成条码图形;它回答的是「给定起始、数量、步长会得到哪些号,以及它们的 Luhn 校验位各是多少」。
计算原理与 Luhn 校验位
连续号是等差数列。第 i 个号(i 从 0 起)= 起始值 + i × 步长。起始 1001、数量 5、步长 1 就得到 1001、1002、1003、1004、1005;步长改成 2 则得到 1001、1003、1005、1007、1009。数量只决定生成几个,步长决定相邻两号差多少,两者互不干扰。
Luhn 校验位的算法。把原始号从右往左编号,最右边那位是第 0 位:偶数位(0、2、4……)上的数字乘 2,若乘积大于 9 就减 9;奇数位保持原值;把所有结果相加得 sum,校验位 = (10 − sum % 10) % 10。标准样例 7992739871 按这套口径实算得到的校验位是 3,完整号 79927398713;本页脚本正是按这一口径算,结果由函数给出而非写死。校验位只依赖原始号本身的数字,与起始值、数量、步长都无关。
校验位的定位。它附在原始号末尾,完整号 = 原始号 + 校验位。校验时把末位先摘掉,对前面重算一遍校验位,再和末位比对:相等即通过。1001 的校验位是 7,完整号 10017;把 1001 敲成 1010,或把 10 与 01 换位,重算出的校验位就对不上末位,当场报错。
本页真正要讲透的是:连续号可预测,校验位防误录。等差数列的好处是整齐、好归档、能看出顺序,代价是毫无秘密可言——看到 1001 到 1005,谁都能猜到下一个是 1006,因此它只适合内部单据、工单、流水号这类「被猜到也无所谓」的场景,绝不能承载兑换权益。Luhn 校验位也不是加密,它不增加任何随机性,完整号依然连着;它的价值在于让号码具备离线自检能力:不联网、不查库,只靠号码本身就能挡住一位输错与相邻位交换这两类占绝大多数的录入错误。把「连续」和「校验」配套使用,等于在「方便归档」与「少录错」之间取了平衡;反过来,若需要的是不可预测的兑换码,就该改用真正随机的生成器,而不是给连续号多补几位——多补几位仍然连着,仍能被猜到。
完整示例(默认输入实算)
默认参数是起始 1001、数量 5、步长 1。页面脚本按等差数列实算得连续号 = …;再对每个号调用同一个 Luhn 函数,首个号 1001 的校验位 = …,完整号 = …。这些结果都不是写死在源码里的。
标准样例单独核对一遍:原始号 7992739871 的校验位 = …,完整号 = …。它与上方校验框第一行是同一个号,脚本会判定「通过」;把末位改成别的数字,同一行立刻变成「不通过」。
把起始、数量或步长改掉,五张卡片与逐行清单同步刷新;把校验框某行改成含字母的内容,会立即得到一条指名行号与原文的报错,而不是被静默跳过或当成 0 处理。
对照表怎么读
工具区下方那张表由脚本对 16 组「起始、数量、步长」逐组调用生成函数与 Luhn 函数生成:列是起始、数量、步长、号段节选、末号、首个校验位、首个完整号,后四列全是算出来的。里面特意放了一组起始为 7992739871 的号段,让你能横向核对标准样例的校验位。
默认显示 12 行,点「加载更多」展开其余 4 行;「导出对照表 CSV」给带 BOM 的文件,「复制对照表 TSV」给制表符文本,都包含展开后的全部行。读表时把「步长」列和「号段节选」列对着看,就能直观看到步长怎么把号距拉开,而校验位一列始终只依赖号本身的数字。
结果边界与舍入规则
- 三个数字框的非法值。空值、非数字、负数、越界或带小数各有指名到具体输入框与当前值的提示;脚本不会用「取不到就当 0」兜底,也不会把数量 0 静默改成 1。
- 溢出保护。起始上限 999999999、数量上限 200、步长上限 10000,保证末号仍在安全整数范围内;超出上限会明确报错,而不是生成一串越界的天文数字。
- 校验框的合法性。每行必须全是 0 到 9 的数字且至少两位;出现字母、空格、负号或只有一位,都会中止并报「第几行」与原文,绝不静默跳过。空行会被过滤,但整框全空会报错让你恢复样例。
- 不通过不等于报错。校验框里末位对不上的合法数字行,会在结果里明确写「不通过」并给出重算得到的校验位,这是正常判定,不是输入非法;只有格式不合法才走红色报错路径。
- 整数无舍入。起始、数量、步长与所有生成的号都是整数,校验位也是 0 到 9 的整数,整条链路没有小数可舍,不做四舍五入,也不按有效数字截断。
- 唯一性与加密。本页不查重、不保证跨批次不重复、不做任何加密,校验位只防误录不防伪造;需要不可预测的凭证请换用随机生成类工具。
- 本地性。只有整数加法、字符串遍历与取模,没有 fetch、没有表单提交、没有第三方脚本,也不写 Cookie 或 localStorage。
常见问题
连续号能当兑换码或优惠券码吗?
不能。等差数列完全可预测,看到 1001 到 1005 就能推出下一个是 1006。它适合内部单据、工单、流水号;兑换码、礼品卡号需要不可预测的随机串,请改用专门的随机或密码生成工具。
Luhn 校验位能防伪造吗?
不能。算法是公开的,任何人都能给任意号算出正确校验位。它只解决「人工敲错」:一位数字输错、相邻两位交换会立刻对不上末位,属于离线自检,不是加密也不是防伪。
标准样例 7992739871 的校验位为什么是 3?
从右往左隔位把数字乘 2、大于 9 减 9,奇数位保持原值,全部相加取 sum,再用 (10 − sum % 10) % 10 得到校验位 3,完整号 79927398713。本页由脚本实算,你可以在校验框第一行看到「通过」。
步长和数量有什么区别?
数量决定生成几个号,步长决定相邻两号差多少。起始 1001、数量 5、步长 1 得 1001 到 1005;步长改成 2 就是 1001、1003、1005、1007、1009,个数仍是 5,号距变了。
校验框出现「不通过」是什么意思?
说明这行是合法数字,但末位与脚本重算出的校验位不一致,通常是把某位敲错或相邻两位交换了。结果里会给出重算得到的正确校验位,方便你对照修正;格式非法的行则走红色报错路径。
输入非数字或留空会怎样?
三个数字框与校验框分别有具体报错:指名是哪个框或第几行、当前值是什么、正确格式是什么。脚本不会把非法值兜底成 0,也不会把空校验框静默当成「全部通过」。
一次最多生成多少个号?
数量上限 200,起始上限 999999999,步长上限 10000,都是为了保证末号仍是安全整数、页面不卡。超上限会明确报错,需拆成多批生成;这个范围内是一次线性循环,瞬间完成。
生成的号会上传或存库吗?
不会。全流程只有整数加法、字符串遍历与取模,没有网络请求、没有表单提交、没有第三方脚本,也不写 Cookie 或 localStorage;本页也不查重、不保证跨批次唯一。
相关工具
- 密码生成器:需要不可预测的兑换码、礼品卡号时用它,正好补上连续号不能承载权益的短板。
- 随机数生成器:做批量抽样或需要打乱编号时取随机值,注意它生成的是离散数而非连续号段。
- base64编码工具:把生成的号段编码成文本便于存档传输,编码不改变号码本身,也不增加随机性。