【发布时间】:2017-04-27 23:10:44
【问题描述】:
我有以下函数可以根据 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 算法。
-
@RobG 你知道任何算法,或者更有用的是用任何编程语言编写的任何示例,以便我可以根据我的需要调整它吗?或者无论如何我可以修改当前代码以支持字母数字验证?
-
我正在考虑删除 fitt if 条件并最初声明一个对象数组,如下所示: var lettersToNumbers = [{'A':0,'B':1,'C':2.. ..}];它将每个字母转换为数字,因此在这种情况下,每个字母都是一些数字。所以在这种情况下,我认为我什至根本不需要更改其余的代码......你认为这会起作用吗@RobG
-
@Traktor53 你觉得我最后的评论怎么样?
标签: javascript checksum luhn check-digit