使用方法
第一步,填数量。ISBN生成器默认一次出 5 条,允许区间 1 到 50,只接受整数。填 5.5、0 或 80 都会被拒绝并提示具体边界,不会静默取整或截断。
第二步,选版本。ISBN-13 是 2007 年 1 月 1 日起使用的 13 位形式,ISBN-10 是 2006 年底之前沿用的 10 位形式。选 ISBN-13 时可以在第三个框选注册组前缀 978 或 979;选 ISBN-10 时前缀框自动置灰失效,因为 10 位形式没有 978、979 这三位的号段。
第三步,点「生成」,或者直接在数量框里裸按 Enter,结果区立刻列出整批号码,一行一条,等宽字体显示。改数量、改版本、改前缀都会自动重算,并回到第 1 批。
第四步,想看别的号码就点「换一批」。换一批不改任何输入,只把内部批次数加一,重新播种确定性算法,得到一批全新的号码;批次数显示在提示行里。点「载入示例」把三个输入和批次数一起还原成默认值。
点「复制全部」把整批号码一次性放进剪贴板,一行一条,方便直接粘进表格或测试数据。下方对照表的「导出对照表 CSV」下载带 UTF-8 BOM 的表格,Excel 打开中文不乱码;「复制对照表」按 TSV 复制,可直接粘进表格软件。
这个工具能解决什么问题
第一,给表单和接口准备格式正确的测试数据。很多系统的图书录入、库存管理、图书馆对接模块都要求输入合法 ISBN,随手敲的十二位数字会被前端校验直接打回。本页生成的号码长度对、字符集对、校验位对,能穿过最常见的格式校验,用来测接口、测导入、测数据库字段长度都够用。
第二,验证自己的校验算法写得对不对。ISBN 的校验位有两种加权规则,13 位用 1 和 3 交替,10 位用 10 到 2 递减,模数分别是 10 和 11。把本页生成的号码喂给你写的校验函数,应当全部通过;喂已知真实书号如 978-0-306-40615-7 也应当通过。两边对不上,说明你的权重方向或取模写法有误。
第三,批量填充演示数据库与示例目录。做 demo 时要几百本假书,逐本编 ISBN 不现实。本页一次最多 50 条,多点几次「换一批」就能凑够量,而且每批都不重样,比复制粘贴同一串更像真实数据。
第四,搞清楚 ISBN 到底由哪几段组成。前缀、注册组、注册者、出版物、校验位这五段的长度此消彼长,看本页的生成过程和对照表,比背定义直观得多。
本页不做这些事:不查询号码是否已被真实出版物占用;不按注册组实际分配规则切分注册者段与出版物段;不生成 EAN-13 商品条码或 ISSN。它只生成结构合法的号码,不保证已注册。
生成原理与变量说明
核心变量四个:数量 count、版本 type、前缀 prefix、批次数 batch。它们先拼成一个种子串 count|type|prefix|batch,按字符码累加得到初始种子,再用线性同余算法 S = (S × 1103515245 + 12345) mod 2^31 逐个产出数位。乘法用 Math.imul 做 32 位整数乘法,避免大数溢出后精度丢失。
ISBN-13 的组装。前 3 位固定为前缀 978 或 979,接着用算法补 9 个数位,凑满 12 位;最后一位校验位由前 12 位算出。加权规则是「从左到右,第 1、3、5……位权重 1,第 2、4、6……位权重 3」,求和后取 (10 - 和 mod 10) mod 10。再取一次模 10 是为了让和为 10 的倍数时校验位是 0 而不是 10。
ISBN-10 的组装。没有 978、979 前缀,直接由算法产出 9 位,最后一位校验位由这 9 位算出。加权规则是「从左到右权重依次为 10、9、8……2」,求和后取 (11 - 和 mod 11) mod 11,结果为 10 时写成大写字母 X。这是 ISBN-10 里唯一会出现字母的地方。
首段为什么限定七个数字。ISBN-10 的第一段就是注册组。单个数字就能表示的注册组只有 0、1、2、3、4、5、7 这七个:0 和 1 给英语区,2 给法语区,3 给德语区,4 给日本,5 给俄语区,7 给中国。数字 6、8、9 开头的注册组都是两位或三位(如 978-600、978-80),不存在单独一位的 6、8、9 组,所以本页的 ISBN-10 首段只从「0123457」里取。
确定性,不是随机。整套流程不调用 Math.random,不读时间戳,不联网。同一组输入加上同一个批次数,在任何设备、任何时间得到的号码完全相同。这也是「换一批」必须单独设计成一个按钮的原因:批次数是唯一的活动变量,你想复现某一批,把数量、版本、前缀和批次数原样填回去即可。
完整示例(默认输入实测)
示例条件与页面默认值完全一致:数量 5、版本 ISBN-13、前缀 978、第 1 批。种子串为 5|ISBN-13|978|0,字符码累加得 1086;随后按线性同余算法产出数位,前 9 个取模 10 的结果依次是 1、0、7、2、5、6、9、4、1。
第一条:前缀 978 加上这九位,前 12 位为 978107256941。按 1、3 交替加权求和:9×1 + 7×3 + 8×1 + 1×3 + 0×1 + 7×3 + 2×1 + 5×3 + 6×1 + 9×3 + 4×1 + 1×3 = 119。校验位取 (10 − 119 mod 10) mod 10 = (10 − 9) mod 10 = 1,完整号码为 9781072569411,与结果区第一行一致。
第二条取接下来的九位 4、3、0、7、8、1、4、9、0,前 12 位为 978430781490,加权和 9 + 21 + 8 + 12 + 3 + 0 + 7 + 24 + 1 + 12 + 9 + 0 = 106,校验位 (10 − 6) mod 10 = 4,完整号码为 9784307814904,正是结果区第二行。后三条同理:9785876749819 的加权和 151、9780305698966 的加权和 124、9783274987031 的加权和 139,三条校验位分别是 9、6、1,全部与结果区一致。
换版本验证另一套规则:数量保持 5、版本切成 ISBN-10、第 1 批,第一条的前 9 位是 236361296。按权重 10 到 2 递减求和:2×10 + 3×9 + 6×8 + 3×7 + 6×6 + 1×5 + 2×4 + 9×3 + 6×2 = 204。校验位取 (11 − 204 mod 11) mod 11 = (11 − 6) mod 11 = 5,完整号码为 2363612965。此时前缀框置灰,种子里前缀段为空串,这正是 ISBN-10 没有号段的体现。
用已知真实书号交叉验证:978-0-306-40615-7 的前 12 位是 978030640615,按同一规则加权和恰使校验位为 7;它的 10 位形式 0-306-40615-2 前 9 位是 030640615,加权后校验位为 2。两个数都对得上,说明本页的两套加权实现与标准一致。
注册组前缀对照表
下表共 21 行,默认显示前 12 行,点「加载更多(还有 9 行)」展开 979 号段与其余常见范围。三列分别是前缀、语言或地区、补充说明。前缀一栏里的 978-0、978-1 这种写法,横线后的数字就是注册组,紧跟其后的才是注册者段。
读表要抓住一条规律:出版量越大的市场,注册组越短。英语区拿到单独一位的 0 和 1,中国、日本、法国、德国各拿到单独一位,印度甚至拿到 81 和 93 两组;而伊朗、香港这类市场要占用三位。注册组短意味着留给注册者和出版物的位数长,能容纳的出版社和书名就多。
979 号段是 978 即将用尽时新增的,目前只有 8、10、11、12、13 五个注册组,分别给美国、法国、韩国、意大利、西班牙,且没有 10 位版本。本页生成 979 号码时只出 ISBN-13,正是这条规则的体现。
结果边界与舍入
- 数量为空。填 0 个字符时点生成,会提示「生成数量是空的」并给出允许区间与默认值示例,不会生成 0 条却显示成功。
- 数量不是整数。填 5.5 或 5.0 之外的写法会提示「这不是整数」。本页用整数正则判断,不是用取整函数,所以 5.5 不会被悄悄变成 5 或 6。
- 数量越界。低于 1 或高于 50 分别有具体提示。上限 50 是显示与复制体验的权衡:一次列出太多行,结果区要滚动很久,而多点几次「换一批」同样能凑够量。
- 版本与前缀的耦合。选 ISBN-10 时前缀框置灰、种子里前缀段为空串。若先选 979 再切 ISBN-10,前缀不影响结果;切回 ISBN-13 时前缀恢复生效并重新计算。
- 校验位为 X。ISBN-10 的校验位按模 11 计算,结果为 10 时按规定写成大写 X。这不是错误字符,粘到校验工具里应被当作数值 10 处理。
- 结构合法不等于已注册。本页只保证长度、字符集与校验位正确,不查询任何注册库。生成的号码极大概率不对应真实出版物,请勿用于正式出版物或商业条码。
- 全程本地。生成只在当前浏览器里做,不发起网络请求,不写 Cookie 和 localStorage,关掉页面什么都不剩。
常见问题
生成的号码是真实出版物的 ISBN 吗?
几乎可以肯定不是。本页只按结构规则拼装号码:长度、字符集、校验位都合法,但注册者段和出版物段是算法产出的随机数位,没有向任何国家 ISBN 机构注册过。它们适合做测试数据,不能印在正式出版物上。
为什么校验位有权重 1 和 3 的交替?
这是 ISBN-13 从 EAN-13 继承来的设计。交替权重能让最常见的两类错误自我暴露:某一位写错时加权和必然对不上;相邻两位互相抄错(比如 12 写成 21)时,两位权重一奇一偶,差值也无法被 10 整除。11 以上的加权在 10 位形式里用递减权重实现同样的目的。
ISBN-10 的校验位为什么会出现 X?
因为 ISBN-10 按模 11 计算,余数范围是 0 到 10,共 11 种可能,而一位数字只能表示 10 种。多出来的那一种用大写字母 X 表示数值 10。所以看到末尾是 X 的十位书号不是乱码,是标准写法。
为什么选 ISBN-10 时前缀框不能选?
因为 10 位形式根本没有 978、979 这个号段。这三个数字是 2005 年之后为了把书号并入 EAN-13 商品条码体系才加在前面的,加上之后总长 13 位,其校验规则也换成了模 10。让前缀框在 ISBN-10 下失效,比留着它产生误导要好。
为什么 ISBN-10 的第一段只出 0 到 5 和 7?
因为单独一位的注册组只有这七个:0 和 1 是英语区,2 是法语区,3 是德语区,4 是日本,5 是俄语区,7 是中国。数字 6、8、9 打头的注册组至少两位(如 978-600 伊朗、978-80 捷克),不存在单独一位的 6、8、9 组。若生成出 6 开头的十位书号,第一段就是无效注册组。
「换一批」和改数量有什么区别?
换一批只把内部批次数加一,三个输入原样不动,得到的是一批全新号码;改数量、版本或前缀会改变种子串,自动回到第 1 批重新计算。想复现某一批,把当时的数量、版本、前缀和批次数原样填回去即可,算法是确定性的。
一次最多能生成多少条?
50 条。这是结果区可读性和复制体验的权衡。需要更多时可以多点几次「换一批」,每批 50 条互不重复;也可以把结果粘进表格再批量拼接。上限写死在输入框的 max 属性里,超出会被拒绝并提示。
我的数据会被上传吗?
不会。所有生成只在当前浏览器本地执行,页面不发起任何网络请求,也不写 Cookie 或 localStorage。打开开发者工具的 Network 面板连点几次生成,记录始终是空的。