我正試圖使用Luhn的演算法創建一個簡單的信用卡驗證器。如果校驗碼與最后輸入的數字相符,那么它應該提醒用戶它是有效的。否則,就說它是無效的。目前,我得到一個錯誤,我的總和(總數)顯示為NaN。我想這是代碼的唯一問題。
< input type="number" id="creditCard" placeholder="000000000000">
< 輸入 型別="提交" id="checkButton" value="CHECK VALIDITY" onclick="checkNumber()">
function checkNumber() {
let number = document.getElementById("creditCard"/span>).value;
let multiplier = "21212121212"。
let multipliedNumber;
let multipliedString;
if (number.length != 16) {
alert("請輸入一個長度為16位的信用卡號碼。")。
} 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}是一個有效的信用卡號碼。`)。
} else {
alert(`${number} is not a valid Credit Card number.`) 。
}
}
uj5u.com熱心網友回復:
有幾個問題:
multipliedNumber是一個產品,所以它是一個數字型別。因此,訪問像[0]或[1]這樣的屬性,將只是評估為undefined。要么先將該值轉為字串,要么(更好)使用算術來提取這兩個數字:multipliedNumber = multipliedNumber % 10 Math. floor(multipliedNumber/10)。multipliedString沒有被初始化,所以向它添加東西將不會得到期望的結果。其次,你把它定義為一個字串,但它應該是一個數字,因為在Luhn的演算法中,你應該把得到的數字加起來,而不是把它們連接起來。所以要像這樣初始化一個變數:sum = 0;......并像你一樣使用它 -- 盡管你可以從
=運算子中受益,而且由于兩種情況下的操作是相同的,你可以在if...else塊之外進行操作。當modulo操作評估為0時,校驗位的計算是錯誤的:
。10 - (multipliedString % 10)然后回傳10,但在這種情況下,校驗位應該是0。這也是Wikipedia上對該演算法的解釋
更正后的版本:
。function checkNumber() {
let number = document.getElementById("creditCard"/span>).value;
let multiplier = "212121212121"; //多了一個字符...
let multipliedNumber;
let sum = 0 //初始化為一個數字。
if (number.length !=16) {
console.log("請輸入一個長度為16位的信用卡號碼。")。
} else {
for (count = 0; count < number.length; count ) { // Include last digit in loop
multipliedNumber = number[count] * multiplier[count];
if (multipliedNumber > 9) {
//使用算術來添加兩個數字。
multipliedNumber = multipliedNumber % 10 Math.floor( multipliedNumber/10)。
}
sum = multipliedNumber;
}
let check = sum % 10; / Simpler now because all digits were processed.
if (check == 0) { //總和是10的倍數。
console.log(`${number} is a valid Credit Card number.`) 。
} else {
console.log(`${number} is not a valid Credit Card number.`) 。
}
}
< input type="number"/span> id="creditCard" placeholder="000000000000">
< 輸入 型別="提交" id="checkButton" value="CHECK VALIDITY" onclick="checkNumber()">
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/311821.html
標籤:
