I'm writing an algorithm to read from a file a list of numbers, and for each, determine if it is valid. If it is, then display which card type it is.
public class CreditCardValidator {
/**
* @param args the command line arguments
* @throws java.io.FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException {
Scanner scan = new Scanner(new File(args[0])); // read from a file
while (scan.hasNextLine()) {
String str = scan.nextLine();
if (validate(str)) {
System.out.println(creditCardType(str));
} else {
System.out.println("Invalid");
}
}
}
private static boolean validate(String str) {
String reverse = new StringBuilder().append(str).reverse().toString();
int[] array = new int[str.length()];
for (int i = 0; i < array.length; i++) {
array[i] = Integer.parseInt("" + reverse.charAt(i));
}
int sum = 0;
for (int i = 0; i < array.length; i++) {
if (i % 2 == 1) {
array[i] *= 2;
if (array[i] > 9) {
array[i] -= 9;
}
}
sum += array[i];
}
return sum % 10 == 0;
}
private static String creditCardType(String str) {
int input1Char = Integer.parseInt(str.substring(0, 1));
int input2Chars = Integer.parseInt(str.substring(0, 2));
int input3Chars = Integer.parseInt(str.substring(0, 3));
int input4Chars = Integer.parseInt(str.substring(0, 4));
int input6Chars = Integer.parseInt(str.substring(0, 6));
if (input2Chars == 34 || input2Chars == 37) {
if (str.length() == 15) {
return "American Express";
}
}
if (input4Chars == 6011
|| (input6Chars >= 622126 && input6Chars <= 622925)
|| (input3Chars >= 644 && input3Chars <= 649)
|| input2Chars == 65) {
if (str.length() == 16) {
return "Discover";
}
}
if (input2Chars >= 51 && input2Chars <= 55) {
if (str.length() >= 16 && str.length() <= 19) {
return "MasterCard";
}
}
if (input1Char == 4) {
if (str.length() >= 13 && str.length() <= 16) {
return "Visa";
}
}
return "Invalid Credit Card Type";
}
}
public class CreditCardValidator {
/**
* @param args the command line arguments
* @throws java.io.FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException {
Scanner scan = new Scanner(new File(args[0])); // read from a file
while (scan.hasNextLine()) {
String str = scan.nextLine();
if (validate(str)) {
System.out.println(creditCardType(str));
} else {
System.out.println("Invalid");
}
}
}
private static boolean validate(String str) {
String reverse = new StringBuilder().append(str).reverse().toString();
int[] array = new int[str.length()];
for (int i = 0; i < array.length; i++) {
array[i] = Integer.parseInt("" + reverse.charAt(i));
}
int sum = 0;
for (int i = 0; i < array.length; i++) {
if (i % 2 == 1) {
array[i] *= 2;
if (array[i] > 9) {
array[i] -= 9;
}
}
sum += array[i];
}
return sum % 10 == 0;
}
private static String creditCardType(String str) {
int input1Char = Integer.parseInt(str.substring(0, 1));
int input2Chars = Integer.parseInt(str.substring(0, 2));
int input3Chars = Integer.parseInt(str.substring(0, 3));
int input4Chars = Integer.parseInt(str.substring(0, 4));
int input6Chars = Integer.parseInt(str.substring(0, 6));
if (input2Chars == 34 || input2Chars == 37) {
if (str.length() == 15) {
return "American Express";
}
}
if (input4Chars == 6011
|| (input6Chars >= 622126 && input6Chars <= 622925)
|| (input3Chars >= 644 && input3Chars <= 649)
|| input2Chars == 65) {
if (str.length() == 16) {
return "Discover";
}
}
if (input2Chars >= 51 && input2Chars <= 55) {
if (str.length() >= 16 && str.length() <= 19) {
return "MasterCard";
}
}
if (input1Char == 4) {
if (str.length() >= 13 && str.length() <= 16) {
return "Visa";
}
}
return "Invalid Credit Card Type";
}
}
No comments:
Post a Comment