我具有以下函数,用于验证基于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/