使用方法
本页把国际银行账号的生成做成可反复试算的小工具,打开就带一组德国(DE)非空示例,不必先输入就能看到完整结果。要生成别的国家的账号,先用「国家」下拉选 DE、FR 或 GB,每个国家对应不同的本国 BBAN 长度(德国与英国 18 位、法国 22 位)。再调两个数字框:「生成数量」决定一次要多少条,范围 1 到 100;「固定种子」决定这批随机数的来源,同一国家加同一种子永远得到同一批账号。数量框或种子框里按回车键 Enter(不加 Ctrl、Cmd 或 Shift)立即重算,也可以点「生成账号」。
结果区把每条 IBAN 按 4 位一组插入空格显示,例如 DE09 0000 0000 0012 3456 78,这是欧洲印刷与网银界面常见的写法,便于肉眼核对;需要连续串时可自行去掉空格。点「复制结果」把当前这批账号收进剪贴板;点「载入示例」把国家、数量和种子全部还原成默认样本。页面上方结果区带 role="alert",读屏软件会朗读生成结果。
下方对照表默认列出 12 行,每行给出序号、国家码、两位校验位和完整 IBAN(每 4 位分组),点「加载更多」展开到 18 行;可导出带 BOM 的 CSV,或按 TSV 复制整张表。每个输入框都给了 min、max、step:数量超出 1 到 100、种子不是正整数,都会弹出具体报错,不会静默当成 0 继续出数。本页明确是格式演示生成器,不绑定任何真实银行账户,严禁用于伪造或测试真实转账。
能解决什么问题
第一类需求是做 IBAN 格式与校验的教学和联调。跨境收款、SaaS 对账、财务系统接入时,工程师需要一个「校验位对得上」的样本来验证自己的 IBAN 解析与 mod97 校验函数。固定种子让演示可复现,两边算出来的是同一批账号,谁算错校验位一眼就能看穿。本页随机IBAN生成器正是为这种场景服务——它输出结构合法、能通过 mod97 的账号串,可直接拿去喂你的校验代码。
第二类需求是批量造格式合法的测试账号。写跨境支付接口、做 IBAN 合法性中间件、压测入库流程时,常需要一大批「长得像真 IBAN、但内容随机」的输入。逐条手搓既慢又容易把校验位算错;本页一次给成百上千个全带正确校验位的样本,且同一种子复现,方便回归测试时比对前后两次是否一致。
本页不解决这些事:它不查任何银行真实账户,不验证某段 IBAN 是否对应一个真实存在的户头,也不指向任何可收款的钱包。mod97 校验位只保证「数字串格式合规」,绝不证明账号真实有效。因此本页是格式与校验演示工具,输出的账号仅供学习、测试和占位,严禁拿去伪造或测试真实转账,否则可能触犯法律。
原理和变量
IBAN 是国际银行账号,结构是「国家码(2 位) + 校验(2 位) + 本国 BBAN」。国家码用 ISO 3166 的两字母(如 DE、FR、GB);中间两位是 mod97 校验位;后缀 BBAN 是各国自己的账号段,长度由国别决定(德国 18、法国 22、英国 18 等)。不同国家的 BBAN 内部含义各异,本页只保证把它填够对应长度,不解析其内部字段。
校验位用 mod97(ISO 7064)。算法先把国家码字母换成数字(A=10、B=11 … Z=35),拼成「国家码数字串 + '00' 占位 + BBAN」这一长串数字,整体对 97 取余得到 rem,再算 校验位 = (98 - rem) % 97,补零成两位。最终把校验位插回「国家码 + 校验位 + BBAN」就得到完整 IBAN。验证时把完整 IBAN 前四位移到末尾、字母转数字后整体 mod97,余数应为 1。
用固定种子复现随机。本页的 BBAN 由一条可复现的线性同余公式产生:s = (Math.imul(s, 1103515245) + 12345) & 0x7fffffff,取数时取 Math.floor(s / 2147483647 * 10) 得到 0 到 9 的一个数字,连续取 BBAN 长度次就得到一条随机本国账号段。给定同一初始种子,每次推进得到的数字序列完全相同,所以固定种子勾选后生成的 IBAN 可跨机器、跨时间复现。国家切换只改变 BBAN 长度和国家码字母,校验公式不变。
完整示例(逐步代入 mod97)
以文档内置样本走一遍:国家码 DE,BBAN 取 000000000012345678(18 位)。先把 DE 转数字:D=13、E=14,得 1314;拼上 '00' 占位与 BBAN,得到数字串 131400000000000012345678。对这串整体做 mod97,余数为某值 rem,则 校验位 = (98 - rem) % 97 = 09。于是完整 IBAN 为 DE09 0000 0000 0012 3456 78,与数据表给出的复算值一致。这条样本用来核对公式,与本页默认随机示例无关。
再取一个法国样本验证:FR 转数字 F=15、R=27,BBAN 取一段 22 位随机串,按同样流程算得校验位为 47,即形如 FR47 6141 6986 5309 2780 8340 60。法国 BBAN 比德国长 4 位,所以整串更长、分组更多,但 mod97 公式完全一样,只是参与运算的数字串更长。两个样本校验位分别为 09 与 47,与数据表一致。
表格里每一行的校验位都不是写死在页面里的答案,而是把那一行的国家码与 BBAN 代入同一条 mod97 公式现算出来的;你切换国家、清空种子换成别的值,整批账号会立刻按新参数重新生成,校验位随之重算。所有示例都能被页面自己的算法复算,不存在手填的常量。
对照表
对照表用固定种子针对当前国家生成 18 组 IBAN,默认显示前 12 行,点「加载更多」展开剩余 6 行。每行给出国家码、两位校验位、以及完整 IBAN(每 4 位分组)。以默认 DE 为例:第 1 行校验位 82、完整 DE82 6201 0648 3107 0756 53;第 6 行校验位 91、完整 DE91 5349 0775 9469 0952 87;第 12 行校验位 51、完整 DE51 6081 4682 4075 9108 86。
表格数据与上方结果区来自同一套生成逻辑:结果区按「生成数量」取前若干条,表格则固定展示 18 条供对照。导出与复制都取自同一份数组,不会漏掉屏幕上未展开的行。切换国家后,表格会按新国家的 BBAN 长度重新生成,法国会比德国多出 4 位、分组多出一组。
与结果区的关系是:结果区回答「我这次要的 N 条账号是什么」,对照表回答「固定种子下整批 18 条长什么样」。前者随数量变化,后者是固定种子的完整展开,两者独立但同源。
结果边界与舍入
- 校验位只验证格式,不验证真实存在。mod97 保证数字串符合 IBAN 结构,但完全不能证明该账号对应真实银行户头。本页生成的账号均为随机格式演示,不绑定任何真实银行账户,严禁用于伪造或测试真实转账。
- 国家码决定 BBAN 长度。DE 与 GB 是 18 位、FR 是 22 位(其余国家各有不同);本页按国别填够对应长度,不支持混用长度,切换国家即按该国规则重算。
- 数量与种子量程。数量限制 1 到 100,种子为正整数;填 0、负数、非数字、超 2147483647,或数量超 100,都会给出对应报错并停止生成,不会静默归零或截断。
- 字母到数字的映射。国家码字母按 A=10…Z=35 转换,仅用于校验运算,不会出现在最终 IBAN 文本里;最终 IBAN 的国家码仍是两位字母。
- 末位补零。校验位可能是一位(如 9),页面会补成两位(09)再拼回,符合 IBAN 规范;不会漏显示前导零。
- 不联网。取随机、算校验、生成表格与复制全部在浏览器本地完成,不发起网络请求,也不写 Cookie 或本地存储;刷新页面后不留存任何已生成的账号。
常见问题
生成的 IBAN 能拿去真实收款或测试转账吗?
绝对不能。本页只保证数字串通过 mod97 格式校验,但 BBAN 部分是随机拼出来的,不对应任何真实银行的真实户头。拿去发起真实转账会失败甚至涉嫌伪造金融凭证;所谓「测试真实转账」也千万不要做。本页明确定位是格式与校验的演示和测试工具,仅供学习、占位和回归测试。
为什么法国(FR)的账号比德国(DE)长?
因为各国 BBAN 长度不同。IBAN = 国家码(2) + 校验(2) + 本国 BBAN,BBAN 是各国自定的账号段,法国规定 22 位、德国与英国是 18 位。本页按国别填够对应长度,所以切换成 FR 后整串会多出 4 位、分组多出一组,但 mod97 校验公式不变。
mod97 里的 '00' 占位是什么意思?
待求的两位校验位在运算时要先当成 00 参与。具体做法是把「国家码转数字 + '00' + BBAN」拼成长数字串做 mod97 得到余数 rem,再算 (98 - rem) % 97 作为校验位。'00' 就是给这两位留出空位,等算出真实校验位后插回「国家码 + 校验位 + BBAN」就得到完整 IBAN。
同一个种子,换国家后生成的账号会一样吗?
不会。种子只决定 BBAN 那一段随机数字序列,而国家改变会同时改变 BBAN 长度和国家码字母,参与 mod97 的数字串也随之变化,校验位和整串都不同。但同一个国家 + 同一个种子,无论什么时候、在哪台机器上算,结果都一致,这正是固定种子复现的意义。
国家码字母会进到最终账号里吗?
最终 IBAN 的国家码始终是两个字母(DE/FR/GB 等)。字母转数字(A=10…Z=35)只发生在校验运算内部,用来把整串变成纯数字做 mod97,运算结束不会写入结果文本,所以你复制到的 IBAN 仍是字母开头的标准格式。
数量和种子都留空会怎样?
数量留空按默认 10 处理,种子留空按默认 20261108 处理,页面打开即带德国示例。只有填了非法值(如数量 0、种子为负数或非数字)才会触发具体报错并停止生成,不会把坏输入悄悄当成 0。
校验位出现前导零(如 09)正常吗?
正常。IBAN 校验位固定两位,算出来是 9 时写成 09,是规范要求的补零,不是缺位。例如文档样本 DE09 0000 0000 0012 3456 78 的校验位就是 09,页面会如实显示前导零,喂给系统前不要自行删掉。
生成的账号会被上传或保存吗?
不会。从取随机、算校验到生成表格和复制到剪贴板,整条链路都在浏览器本地完成,不发起任何网络请求,也不写 Cookie 或 localStorage。关掉页面后当前这批账号不会留存,下次打开仍是默认示例。