如何计算 IBAN 国家校验码?

Posted

技术标签:

【中文标题】如何计算 IBAN 国家校验码?【英文标题】:How can I calculate an IBAN national check digit? 【发布时间】:2013-11-21 18:40:01 【问题描述】:

在Wikipedia 之后,我正在开发一个 Java 应用程序,用于计算和验证来自不同国家/地区的 IBAN。一些 BBAN 有一个国家校验位,但我找不到任何关于如何计算它的文档。我在哪里可以找到“国家校验位”的算法? 我对“iban check digit”不感兴趣,但对与国家相关的数字不感兴趣。

【问题讨论】:

也许在这里? the first google result for "how to calculate iban check digit" 嗯,我说的是“国家校验码”,而不是“iban校验码”。 【参考方案1】:

国家校验位在国家标准中定义,每个国家都有不同的标准。有些国家/地区有一个校验位,有些国家有两个,有些则没有。

例如,西班牙银行帐号有两个校验位。第一个是基于 4 位数的分支机构和办事处代码,第二个是根据 10 位数的帐号计算得出的。您可以在任何与银行 IT 相关的文档中找到它,例如 the ones here,但基本上您将每个数字乘以 2 mod 11 的幂,将结果数字相加,然后除以 11 时取余数。@ 987654322@ 有用于验证和计算校验位的示例代码。

其他国家使用其他方法,例如Luhn algorithm。

【讨论】:

感谢您的回答,但我已经找到有关意大利和西班牙国家校验位的文档。也许我会在 ABI (IT) 或 AEB (ES) 等机构网站上搜索文档,但我必须先找到每个国家/地区的这些法规。 听起来你已经找到答案了。 我找到了我的问题 ;)【参考方案2】:

当你需要构建/解构西班牙伊班时,西班牙是一个有两组校验位的国家,按以下顺序计算:45、91

ES91 2100 0418 4502 0005 1332

国家代码(2 个字符“ES”) 校验位(2 个字符) 银行标识符(4 个字符) 分行代码(4 个字符) 校验位(2 个字符) 帐号(10 个字符)

分步指南 1. 首先,将 ES 更改为等效的数字 E=14, S=28 并将此值附加 00,因此 142800 现在,要获取第一组 iban 校验位,请将帐号添加到步骤 1 中的号码:0200051332142800

    现在对那个值取模 97,然后从 98 中减去余数。0200051332142800 mod 97 = 53, 98 - 53 = 45

    如果您以一位数字结尾,则应使用前导零填充。

    要获得第二个 iban 校验位,请将银行 id(2100) 附加到分行 id(0418),然后是帐号,加上第一个校验位 (450200051332),然后是步骤 1 中的值,总计:21000418450200051332142800

    又是 mod 97 那个值,21000418450200051332 mod 97 = 7, 98 -7 = 91

【讨论】:

你从哪里得到“数字等效 E=14, S=28” ..? 不能用java的函数获取数值,例如Character.getNumericValue('a') -> 10 @Praditha, E=14 因为字符 'E' 的 ASCII 值 - 55 = 14 此答案计算的是 IBAN 校验位,而不是国家 BRAN 校验位。 BRAN 是整个 IBAN 的一个组成部分,问题具体涉及该组成部分,其结构由国家标准定义,不在 IBAN 标准的范围内。

以上是关于如何计算 IBAN 国家校验码?的主要内容,如果未能解决你的问题,请参考以下文章

国家商用password基于SM2的软件授权码生成及校验

如何计算modbus-rtu的crc校验码

汉明码是如何校验的,比如一道题:设数据为01101001,试采用4个校验位求其偶校验方式的汉明码

如何简单的计算且通俗的理解CRC码(循环冗余校验码)含过程推演详细步骤

如何简单的计算且通俗的理解CRC码(循环冗余校验码)含过程推演详细步骤

crc校验码计算方法是啥?