我具有以下函数,用于验证基于Luhn算法的仅由数字组成的数字输入:

function isCheckdigitCorrect(value) {
// accept only digits, dashes or spaces
  if (/[^0-9-\s]+/.test(value)) return false;

  var nCheck = 0, nDigit = 0, bEven = false;
  value = value.replace(/\D/g, "");

  for (var n = value.length - 1; n >= 0; n--) {
    var cDigit = value.charAt(n),
      nDigit = parseInt(cDigit, 10);

    if (bEven) {
      if ((nDigit *= 2) > 9) nDigit -= 9;
    }

    nCheck += nDigit;
    bEven = !bEven;
  }

  return (nCheck % 10) == 0;
}


无论如何,我是否也可以验证字母数字,所以假设我有一个有效的ID:AC813(6),()是校验和。因此,有一种方法可以防止用户输入错误的AF813(6),从而告诉用户错误的ID。

我感谢您的帮助

最佳答案

如果您只想用字母代替一些数字来进行Luhn算法,则可以执行一个附加步骤,将字母转换为函数中的数字。

因此,如果您想让A,B,C,D转换为0、1、2、3,则可以执行以下操作:



function isCheckdigitCorrect(value) {

  // Letter to number mapping
  var letters = {a:'0', b:'1', c:'2', d:'3'};

  // Convert letters to their number equivalents, if they have one
  value = value.split('').reduce(function(s, c){
    return s += letters[c.toLowerCase()] || c;
  },'');

  // Continue as currently
  // accept only digits, dashes or spaces
  if (/[^0-9-\s]+/.test(value)) return false;

  var nCheck = 0, nDigit = 0, bEven = false;
  value = value.replace(/\D/g, "");

  for (var n = value.length - 1; n >= 0; n--) {
    var cDigit = value.charAt(n),
      nDigit = parseInt(cDigit, 10);

    if (bEven) {
      if ((nDigit *= 2) > 9) nDigit -= 9;
    }

    nCheck += nDigit;
    bEven = !bEven;
  }

  return (nCheck % 10) == 0;
}

// In the following, A = 0 and D = 3
console.log(isCheckdigitCorrect('375767AA4D6AA21'));





您可以以类似方式实现其他算法。

关于javascript - 我需要使用字母数字的校验和来验证输入字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43669345/

10-12 12:50
查看更多