一个信用卡号必须是13到16位的整数。它的开头必须是:
4,指Visa卡
5,指Master卡
37,指American Express卡
6,指Discover卡
1)从右到左对每个偶数位字翻倍。如果对某个数字翻倍之后的结果是一个两位数,那么就将这个两位加在一起得到一位数。
2)现在将第一步得到的所有一位数相加。
3)将卡号里从右到左在奇数位上的所有数字相加。
4)将第二步和第三步得到的结果相加。
5)如果第四步得到的结果能被10整除,那么卡号是合法的;否则卡号是不合法的。
package com.sugarpie.classtest02;
import java.util.Scanner;
/**
* @author sugarpie
* @create 2021-03-25-15:12
*/
public class CardTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter a credit card number as a long integer:");
String cardID = input.nextLine();
Label:while (true){
char c1 = cardID.charAt(0);
char c2 = cardID.charAt(1);
for (int i = 0;i < cardID.length();i++) {
if (!Character.isDigit(cardID.charAt(i))) {
System.out.println(cardID + " is invalid");
break Label;
}
}
if (!(c1 == '4' || c1 == '5' || (c1 == '3' && c2 == '7') || c1 == '6')) {
System.out.println(cardID + " is invalid");
break Label;
}
if (cardID.length() < 13 || cardID.length() > 16) {
System.out.println(cardID + " is invalid");
break Label;
}
int sumEvenNumber = 0,sumOddNumber = 0;
for (int i = cardID.length() - 1;i >= 0;i--){
if (i % 2 == 0){
char charEven = cardID.charAt(i);
int evenNumber = charEven - '0';
sumEvenNumber += evenNumber * 2 / 10 + evenNumber * 2 % 10;
}else {
char oddEven = cardID.charAt(i);
int OddNumber = oddEven - '0';
sumOddNumber += OddNumber;
}
}
int sum = sumEvenNumber + sumOddNumber;
if (sum % 10 == 0){
System.out.println(cardID + " is valid");
}else {
System.out.println(cardID + " is invalid");
}
break Label;
}
}
}