亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Luhn 算法進行信用卡檢查

使用 Luhn 算法進行信用卡檢查

米琪卡哇伊 2021-10-28 16:39:15
我正在嘗試在 JAVA 中創建一個應用程序,以檢查用戶輸入的信用卡號是否有效。這些是模數 10 的檢查步驟:Step1:從右到左每第二個數字加倍。如果一位數加倍得到兩位數,則將兩位數相加得到一位數。步驟 2:現在將步驟 1 中的所有個位數相加Step3:將卡號中從右到左奇數位的所有數字相加Step4:將第2步和第3步的結果相加第五步:如果第四步的結果能被10整除,則卡號有效;否則無效。在這種情況下,卡號無效——因為 75 不能被 10 整除。到目前為止,我的問題是我嘗試的每個卡號(使用有效號碼)都被告知它無效。我嘗試使用調試工具,看起來我的 sum 值總是錯誤的。我需要幫助找出我在計算中搞砸的地方,或者我是否遺漏了什么。public class CreditCardChecker {/** * @param args the command line arguments */public static void main(String[] args) {    // TODO code application logic here    Scanner sc = new Scanner(System.in);    System.out.println("Enter credit card number to check validity: ");    System.out.println();    String cardNo = sc.next();    int sum = FindSum(cardNo);    if ((sum % 10) == 0) {        System.out.println("The card number is VALID.");    } else {        System.out.println("The card number is INVALID");    }}public static int FindSum(String cardNo) {    //CONVERTING CARD NUMBER INTO AN ARRAY    int[] digits = new int[cardNo.length()];    for (int i = 0; i < cardNo.length(); i++) {        digits[i] = Character.getNumericValue(cardNo.charAt(i));    }    //DOUBLE EVERY OTHER NUMBER FROM RIGHT TO LEFT    for (int i = digits.length - 1; i >= 0; i -= 2) {        digits[i] += digits[i];        if (digits[i] > 9) {            digits[i] = digits[i] - 9;        }    }    int sum = 0;    for (int i = 0; i < digits.length; i++) {        sum += digits[i];    }    sum *= 9;    return sum;}}
查看完整描述

1 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

您在執行該步驟時出錯:

Step1:從右到左每第二個數字加倍。如果一位數加倍得到兩位數,則將兩位數相加得到一位數。

您從信用卡號的最后(n) 位開始迭代,而您應該從第 (n-1) 位開始。也就是說,改變:

for (int i = digits.length - 1; i >= 0; i -= 2)

for (int i = digits.length - 2; i >= 0; i -= 2)

另外,請記住,您的FindSum(String cardNo)方法僅適用String于其中沒有任何空格的 s(這就是您獲取輸入的方式)。


查看完整回答
反對 回復 2021-10-28
  • 1 回答
  • 0 關注
  • 215 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號