(羣碩)6. 編寫一個程序,驗證從標準輸入獲得的信用卡號是否校驗通過, 校驗通過,則輸出”成功“,校驗未通過則輸出”失敗“。該校驗過程如下:
(1)從卡號最後一位數字開始,逆向將奇數位(l,3,5等等)相加。 (2)從卡號最後一位數字開始,逆向將偶數位數字,先乘以2(如果乘積爲兩位數, 則將其減去9),再求和。 (3)將奇數位總和加上偶數位總和,結果應該可以被10整除。 例如,卡號是54321123456788881,則程序應輸出:成功。請編程實現。
public class KaHao {
/*
* (羣碩)6. 編寫一個程序,驗證從標準輸入獲得的信用卡號是否校驗通過, 校驗通過,則輸出”成功“,校驗未通過則輸出”失敗“。該校驗過程如下:
* (1)從卡號最後一位數字開始,逆向將奇數位(l,3,5等等)相加。 (2)從卡號最後一位數字開始,逆向將偶數位數字,先乘以2(如果乘積爲兩位數,
* 則將其減去9),再求和。 (3)將奇數位總和加上偶數位總和,結果應該可以被10整除。
* 例如,卡號是54321123456788881,則程序應輸出:成功。請編程實現。
*/
public static void main(String[] args) {
//單個字符轉換爲整型,只需:int num=ch[i]-'0';
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你的卡號:");
String str = sc.next();
char[] ch = str.toCharArray();
int re=ji(ch)+ou(ch);
if (re%10==0) {
System.out.println("這是一個正確的卡號");
}
else
{
System.out.println("這個卡號不正確");
}
}
private static int ou(char[] ch) {
int sum2=0;
//數組的最後一位比長度少1,偶數位又減一
for (int i = ch.length-1-1; i >= 0; i-=2) {
int j=ch[i]-'0';
j=j*2;
if (j>=10) {
j-=9;
}
sum2+=j;
}
return sum2;
}
private static int ji(char[] ch) {
int sum1=0;
//倒數第一位爲數組長度減一
for (int i = ch.length-1; i >=0; i-=2)
{
int j=ch[i]-'0';
sum1+=j;
}
return sum1;
}
}