2016-02-20 141 views
-2

對於那些熟悉Luhn算法的人,我正在編寫一個程序,使用這種算法驗證信用卡號碼。這是我已經:Luhn's Algorithm not working properly

Scanner input = new Scanner(System.in); 

String ccNum = ""; 
int product = 0; 
int sum = 0; 

System.out.print("Please enter a credit card #: "); 
ccNum = input.next(); 

for(int i = 0 + 1; i < ccNum.length(); i--){ 
    int number = Integer.parseInt(ccNum.substring(i, i + 1)); 

    if(i % 2 != 0){ 
     product = number * 1; 
    } 
    else{ 
     product = number * 2; 
    } 
    if(product > 9){ 
     product -= 9; 
     sum += product; 
    } 
} 
boolean valid = (sum % 10 == 0); 
if(valid){ 
    System.out.println("Valid!"); 
} 
else{ 
    System.out.println("Invalid!"); 
} 
} 

} 

我對這個程序感到困惑。當我運行它時,我得到了「StringIndexOutOfBoundsExpection」錯誤。我應該改變什麼?但是,我們不能在這個程序中使用數組。而不是完整的16位數字,我們只使用8位數字。

+0

'我 - '你確定嗎? – njzk2

+0

你知道Luhn在那裏有很多實現,我想在Apaches commons編解碼庫中有​​一個 – Gavin

+0

我要檢查一下。 –

回答

0

試試這個。

boolean alt = false; 
    for(int i = ccNum.length() - 1; i >= 0; i--, alt = !alt){ 
     int number = ccNum.charAt(i) - '0'; 
     if(alt) 
      number *= 2; 
     if(number > 9) 
      number -= 9; 
     sum += number; 
    } 
    boolean valid = (sum % 10 == 0); 
+0

它仍然給我所有的輸入「無效」。 –