【发布时间】:2021-10-29 19:29:11
【问题描述】:
我正在尝试使用 Luhn 算法创建一个简单的信用卡验证器。如果校验位与最后输入的数字匹配,那么它应该提醒用户它是有效的。否则,说它无效。目前,我的总和(总计)显示为 NaN 时出现错误。我认为这是代码的唯一问题。
<input type="number" id="creditCard" placeholder="0000 0000 0000 0000">
<input type="submit" id="checkButton" value="CHECK VALIDITY" onclick="checkNumber()">
function checkNumber() {
let number = document.getElementById("creditCard").value;
let multiplier = "212121212121212";
let multipliedNumber;
let multipliedString;
if (number.length != 16) {
alert("Please enter a Credit Card number that is 16 digits in length.");
} else {
for (count = 0; count < number.length - 1; count++) {
multipliedNumber = number[count] * multiplier[count];
console.log(multipliedNumber);
if (multipliedNumber > 9) {
multipliedNumber = multipliedNumber[0] + multipliedNumber[1];
multipliedString = multipliedString + multipliedNumber;
} else {
multipliedString = multipliedString + multipliedNumber;
}
}
console.log(multipliedString);
let checkDigit = 10 - (multipliedString % 10);
if (checkDigit == number[15]) {
alert(`${number} is a valid Credit Card number.`);
} else {
alert(`${number} is not a valid Credit Card number.`);
}
}
}
【问题讨论】:
-
multiplier是一个字符串。multiplier[count]是一个字符串。number是一个字符串。number[count]是一个字符串。当您将字符串与字符串相乘时,您期望会发生什么? -
我可以添加 parseInt
-
Trincot 已经解释了您的代码存在的问题。但您也可以查看已经可用的many other Luhn Algorithm JS questions。其中许多不共享 16 位限制。我对我不久前写的an answer 非常满意。
标签: javascript algorithm validation credit-card luhn