Question
Hello Tutors, can you please help explain why i have a lot of errors on my codes. thanks import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import
Hello Tutors, can you please help explain why i have a lot of errors on my codes. thanks
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class CreditCardValidation {
public static final int INVALID = -1;
public static final int VISA = 0;
public static final int MASTERCARD = 1;
public static final int AMERICAN_EXPRESS = 2;
public static final int EN_ROUTE = 4;
public static final int DINERS_CLUB = 5;
public static final int DISCOVER = 3;
private static final String[] cardNames = { "Visa", "Mastercard", "American Express", "Discover" };
/**
* Valid a Credit Card number
*/
public static boolean validCC(String number) throws Exception {
int CardID;
if ((CardID = getCardID(number)) != -1)
return validCCNumber(number);
return false;
}
/**
* Get the Card type returns the credit card type INVALID = -1; VISA = 0;
* MASTERCARD = 1; AMERICAN_EXPRESS = 2; DISCOVER = 3
*/
public static int getCardID(String number) {
int valid = INVALID;
String digit1 = number.substring(0, 1);
String digit2 = number.substring(0, 2);
String digit3 = number.substring(0, 3);
String digit4 = number.substring(0, 4);
if (isNumber(number)) {
/*
* ----* VISA prefix=4* ---- length=13 or 16 (can be 15 too!?!
* maybe)
*/
if (digit1.equals("4")) {
if (number.length() == 13 || number.length() == 16)
valid = VISA;
}
/*
* ----------* MASTERCARD prefix= 51 ... 55* ---------- length= 16
*/
else if (digit2.compareTo("51") >= 0 && digit2.compareTo("55") <= 0) {
if (number.length() == 16)
valid = MASTERCARD;
}
/*
* ----* DISCOVER card prefix = 60* -------- lenght = 16* left as an
* exercise ...
*/
else if (digit4.equals("6011")) {
if (number.length() == 16)
valid = DISCOVER;
}
/*
* ----* AMEX prefix=34 or 37* ---- length=15
*/
else if (digit2.equals("34") || digit2.equals("37")) {
if (number.length() == 15)
valid = AMERICAN_EXPRESS;
}
}
return valid;
}
public static boolean isNumber(String n) {
try {
double d = Double.valueOf(n).doubleValue();
return true;
} catch (NumberFormatException e) {
e.printStackTrace();
return false;
}
}
public static String getCardName(int id) {
return (id > -1 && id < cardNames.length ? cardNames[id] : "");
}
public static boolean validCCNumber(String n) {
try {
/*
* * known as the LUHN Formula (mod10)
*/
int j = n.length();
String[] s1 = new String[j];
for (int i = 0; i < n.length(); i++)
s1[i] = "" + n.charAt(i);
int checksum = 0;
for (int i = s1.length - 1; i >= 0; i -= 2) {
int k = 0;
if (i > 0) {
k = Integer.valueOf(s1[i - 1]).intValue() * 2;
if (k > 9) {
String s = "" + k;
k = Integer.valueOf(s.substring(0, 1)).intValue() + Integer.valueOf(s.substring(1)).intValue();
}
checksum += Integer.valueOf(s1[i]).intValue() + k;
} else
checksum += Integer.valueOf(s1[0]).intValue();
}
return ((checksum % 10) == 0);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* It writes valid/Invalid card numbers to the file bases on the file name
* given.
*
* @param filename
* @param cardNums
*/
public static void write(String filename, List
System.out.println("Writing Numbers to " + filename + "....");
File file = new File(filename);
// creates the file
try {
file.createNewFile();
// creates a FileWriter Object
FileWriter writer = new FileWriter(file);
// Writes the content to the file
for (String number : cardNums) {
writer.append(number + " ");
}
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Read the file with the given space separated numbers in it.
*
* @param input
* filename
*/
public static void read(String filename) {
System.out.println("Reading " + filename + "....");
List
List
try {
BufferedReader read = new BufferedReader(new FileReader(filename));
String line = null;
// ArrayList to maintain list of Valid and Invalid Card numbers.
while ((line = read.readLine()) != null) {
String[] var = line.split(" ");
for (String cardNum : var) {
System.out.println("Card number : " + cardNum);
int cardType = getCardID(cardNum);
CreditCard card = null;
CardFactory cardFactory = new CardFactory();
if ((validCC(cardNum))) {
card = cardFactory.getCard(cardType, cardNum);
System.out.println("This is a " + getCardName(cardType) + " card. " + card.toString());
validCards.add(card.toString());
}
else
System.out.println("This card is invalid or unsupported!");
invalidNums.add(cardNum);
}
}
} catch (Exception e) {
e.printStackTrace();
}
write("valid_cards.txt", validCards);
write("invalid_numbers.txt", invalidNums);
System.out.println("Finished !");
}
/*
* * For testing purpose** java CCUtils [credit card number] or java CCUtils
* *
*/
public static void main(String args[]) throws Exception {
read("yourfile.txt");
}
}
=====
public class CardFactory {
public CreditCard getCard(int cardType, String aCard) {
CreditCard card = null;
switch (cardType) {
case 0:
card = new VisaCC(aCard);
break;
case 1:
card = new MasterCC(aCard);
break;
case 2:
card = new AmExCC(aCard);
break;
case 3:
card = new DiscoverCC(aCard);
break;
}
return card;
}
}
======
/public class VisaCC extends CreditCard {
public VisaCC(String cardNumber) {
super.number=cardNumber;
}
@Override
public String toString() {
return "VisaCC ["+super.number+"]";
}
}
======
public class MasterCC extends CreditCard {
public MasterCC(String cardNumber) {
super.number=cardNumber;
}
@Override
public String toString() {
return "MasterCC ["+super.number+"]";
}
}
======
public class AmExCC extends CreditCard {
public AmExCC(String cardNumber) {
super.number=cardNumber;
}
@Override
public String toString() {
return "AmExCC ["+super.number+"]";
}
}
=====
public class DiscoverCC extends CreditCard {
public DiscoverCC(String cardNumber) {
super.number=cardNumber;
}
@Override
public String toString() {
return "DiscoverCC ["+super.number+"]";
}
}
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started