在没有regExp的情况下验证信用卡

时间:2017-10-31 01:51:47

标签: javascript

我正在尝试验证信用卡号,该号码可能包含四个字母数字字符的测试,用连字符( - )或不带连字符分隔。不使用regExp。

我尝试了不同的方法,但我无法弄清楚如何正确地做到这一点。 这就是我到目前为止所做的:

    function isCredit(input) {
      var i, code;
      //if input.length > 19, stop execution
      if(input.length > 19) return false; 
      for(i = 0; i < input.length; i++) {
       code = input.charCodeAt(i);

       //Matches to only numbers and Capital letters 
        if((code > 47 && code < 58) && (code > 64 && code < 91)) {

        //if every 5th character is "-"
          if((input.slice(4, 5) === "-") && (input.slice(9, 10) === "-") &&(input.slice(14, 15) === "-")) {
        return true;
      }
    }
    return false;
  }
}
isCredit("12A4-56H8-43K6-36U3"); // returns true;
isCredit("4427A693CF324D14"); // returns true;
isCredit("----------------"); // returns false;

感谢任何帮助和指导!

1 个答案:

答案 0 :(得分:0)

我对你的要求并不十分清楚。在这里我假设“12A556H8-43K636U3”是一个有效的卡号,如果你允许连字符遗漏。

function isAlphaNum(ch) {
    var code = ch.charCodeAt(0);
    return ((code > 47 && code < 58) || (code > 64 && code < 91));
}

function isCard(str) {
    var char, i = 0, x = [1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1];
    while (char = str[i++]) {
      if (x[0] == undefined) {
        return false;
      }
      if (isAlphaNum(char)) {
        if (x[0]) {
            x.shift();
        } else {
            x.splice(0,2);
        }
      } else if (char == '-') {
        if (!x[0]) {
            x.shift();
        } else {
            return false;
        }
      } else {
        return false;
      }
   }
   return x[0] == undefined;
}