使用JavaScript计算欧洲IBAN

7
我有德国的“银行代码”和账号,现在我想用javascript计算出相应的IBAN,这样我就不必在一个不可信的网站上输入我的银行数据了。
我该如何在自己的客户端上使用javascript进行计算?

1
“计算IBAN”是什么意思? - fvu
1
请查看维基百科页面,“生成IBAN应由服务该账户的银行/分支机构独家负责”。页面末尾有一个国家格式表。 - Xotic750
不确定您为什么需要这个,但是http://security.stackexchange.com/上的人会对许多建议表示不满。如果我需要披露敏感信息,例如银行分拣代码和银行账号,我只会在银行内部进行。你怎么知道Javascript代码会在用户的浏览器中启用?你怎么知道网站不会被黑客攻击,Javascript文件不会被篡改?您不应该提出这样的建议。如果您需要用户的IBAN,请请求它。如果用户不知道,请要求他/她去银行。 - oleksii
这就是为什么我认为JavaScript解决方案比许多CGI转换器(如http://www.iban-rechner.de/)更安全的原因 - 如果只使用JavaScript,您不会向主机透露您的帐户信息,因为它在本地计算机上计算。 - rubo77
试试这个http://stackoverflow.com/questions/21735674/iban-validation-jquery - Srinivasan D
显示剩余4条评论
4个回答

7
我发现了一个在github上的项目https://github.com/arhs/iban.js,它可以轻松地检查IBAN是否正确。类似于:
<script src="iban.js"></script>
<script>
    // the API is now accessible from the window.IBAN global object
    IBAN.isValid('hello world'); // false
    IBAN.isValid('BE68539007547034'); // true
</script>

此软件采用MIT许可证,因此您可以查看其如何进行验证并尝试使用它生成您的IBAN。


3

基于http://toms-cafe.de/iban/iban.js的工作,我开发了自己的IBAN检查版本。

您可以通过修改变量CODE_LENGTHS来修改国家支持。

这是我的实现:

function alertValidIBAN(iban) {
    alert(isValidIBANNumber(iban));
}
/*
 * Returns 1 if the IBAN is valid 
 * Returns 0 if the IBAN's length is not as should be (for CY the IBAN Should be 28 chars long starting with CY )
 * Returns any other number (checksum) when the IBAN is invalid (check digits do not match)
 */
function isValidIBANNumber(input) {
    var CODE_LENGTHS = {
        AD: 24, AE: 23, AT: 20, AZ: 28, BA: 20, BE: 16, BG: 22, BH: 22, BR: 29,
        CH: 21, CR: 21, CY: 28, CZ: 24, DE: 22, DK: 18, DO: 28, EE: 20, ES: 24,
        FI: 18, FO: 18, FR: 27, GB: 22, GI: 23, GL: 18, GR: 27, GT: 28, HR: 21,
        HU: 28, IE: 22, IL: 23, IS: 26, IT: 27, JO: 30, KW: 30, KZ: 20, LB: 28,
        LI: 21, LT: 20, LU: 20, LV: 21, MC: 27, MD: 24, ME: 22, MK: 19, MR: 27,
        MT: 31, MU: 30, NL: 18, NO: 15, PK: 24, PL: 28, PS: 29, PT: 25, QA: 29,
        RO: 24, RS: 22, SA: 24, SE: 24, SI: 19, SK: 24, SM: 27, TN: 24, TR: 26
    };
    var iban = String(input).toUpperCase().replace(/[^A-Z0-9]/g, ''), // keep only alphanumeric characters
            code = iban.match(/^([A-Z]{2})(\d{2})([A-Z\d]+)$/), // match and capture (1) the country code, (2) the check digits, and (3) the rest
            digits;
    // check syntax and length
    if (!code || iban.length !== CODE_LENGTHS[code[1]]) {
        return false;
    }
    // rearrange country code and check digits, and convert chars to ints
    digits = (code[3] + code[1] + code[2]).replace(/[A-Z]/g, function (letter) {
        return letter.charCodeAt(0) - 55;
    });
    // final check
    return mod97(digits);
}
function mod97(string) {
    var checksum = string.slice(0, 2), fragment;
    for (var offset = 2; offset < string.length; offset += 7) {
        fragment = String(checksum) + string.substring(offset, offset + 7);
        checksum = parseInt(fragment, 10) % 97;
    }
    return checksum;
}

这里还有一个可行的fiddle


3
所以,如果您想使用手头不同的旧式国家组件重构IBAN代码,可以使用维基百科文章作为基础。具体来说,德国的IBAN是按以下方式构建的:
DEkk bbbb bbbb cccc cccc cc

在哪里

  • kk 是校验码
  • bbbbbbbb 是 BLZ
  • cccccccccc 是账户号码

注意:确切的格式取决于国家,上面的示例适用于德国

Tom's Cafe 提供了一个完整的 JavaScript 实现,您可以在自己的应用程序中使用,因为校验和计算并不是简单的。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接