Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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 cardNums) {

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 validCards = new ArrayList();

List invalidNums = new ArrayList();

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

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Financial management theory and practice

Authors: Eugene F. Brigham and Michael C. Ehrhardt

12th Edition

978-0030243998, 30243998, 324422695, 978-0324422696

Students also viewed these Programming questions

Question

Environmental education explain?

Answered: 1 week ago

Question

Scope of environmental science short brief ?

Answered: 1 week ago

Question

Ecology and economy ?

Answered: 1 week ago