Javascript IBAN验证。检查德国或奥地利IBAN

时间:2015-03-26 10:04:42

标签: javascript validation iban

我想验证德国或奥地利的iban。

['validate-IBAN', 'Please enter a valid IBAN.', function (v) {

     var pass=v.strip();
     if (0 == pass.length) {
         return true;
     }
     if (!(/[AT || DE]\w{2}/i.test(v)) || !(/[0-9]\w{18 || 20}/.test(v))) {
         return false;
     }
     return !(pass.length < 20);

        }],

我想检查德国IBAN,如DE19 1234 1234 1234 1234 12(两个字母和20个数字)或 奥地利IBAN,如AT6119043002345732201(2个数字和18个数字)

但它不起作用。有什么问题?

非常感谢( - :

1 个答案:

答案 0 :(得分:0)

您已经发明了一种新的正则表达式语法,但是您忘了告诉Javascript维护者实现它。没有类似[AT || DE]\w{18 || 20}的内容。

你需要:

  • 首先删除所有空格
  • 检查正则表达式/DE\d{20}|AT\d{18}/
  • check the sum

我想,检查总和是最重要的部分,因为它可以防止用户误入错误。

正如评论中所述,可以使用ready to use script。但是,我发现它太复杂了,因为它们防止了太不可能的错误(IBAN结构错误,但校验和正确)。我自己写了一个简单的函数

isValid: function(x) {
    if (x.length < 5) return false;
    if (!x.match(/[A-Z]{2}[0-9]{2}[A-Z0-9]+/)) return false;
    var ASCII_0 = "0".charCodeAt(0);
    var ASCII_A = "A".charCodeAt(0);
    var acc = 0;
    function add(n) {
        if (acc > 1000000) acc %= 97;
        acc = n < ASCII_A ? 10 * acc + n - ASCII_0 
            : 100 * acc + n - ASCII_A + 10;
    }
    for (var i=4; i<x.length; ++i) add(x.charCodeAt(i));
    for (var i=0; i<4; ++i) add(x.charCodeAt(i));
    acc %= 97;
    return acc == 1;
},