Skip to content

Latest commit

 

History

History
38 lines (29 loc) · 829 Bytes

信用卡、储蓄卡.md

File metadata and controls

38 lines (29 loc) · 829 Bytes

校验规则

  1. 卡号长度允许范围:15—19
  2. 从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
  3. 从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
  4. 将奇数位总和加上偶数位总和,结果应该可以被10整除。

JavaScript

function validate(card) {
  var REG_LENGTH = /^\d{15,19}$/;

  if (!REG_LENGTH.test(card)) {
    return false;
  }

  return card.split('').reverse().reduce(function (prev, current, i) {
    var n = parseInt(current, 10);

    if (i % 2 === 1) {
      n *= 2;
      if (n > 9) {
        n -= 9;
      }
    }

    return prev + n;
  }, 0) % 10 === 0;
}

参考资料

  1. Luhn algorithm