Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

What to use in your completed code Get input from file. Ask user at least a sing

ID: 3825249 • Letter: W

Question

What to use in your completed code Get input from file.

Ask user at least a single question and read at least one answer.

Use at least a single method from Math class.

Use at least one overloaded constructor.

Use at least one if-else-if, while, for, and enhanced for loops.

Use methods to pass and return identifiers and objects.

Pass arrays to/from methods.

Use at least a method to sort the array in the project.

Use inheritance and polymorphism.

Use exception handling.

Use input validation.

Pass the input and output files as commandline arguments.

Final Project - Credit card numbers and the case of Mobius Duck In this project, you are assisting an investigation.

The investigator asked you to help him determine the validity of credit card numbers located in a case of Mobius Duck, case number 20150510-001. Y

our task is to: – Read the data listed below “Data to Evaluate” from a file.

– Evaluate each number to see if they are representing a possible credit card number.

– Validate each credit card number to see if they are a valid number.

– Store the valid numbers and invalid numbers in a separate array.

– Write the contents of validated credit card number array into a file called “valid_cards.txt”.

– Write the invalid credit card number array to a file called “invalid_numbers.txt”.

– Make sure to include the issuer for each group of credit card numbers identified.

– Your application should work with any number of credit card entries. Turn in:

– Source code ( .java ) files of all classes and driver class.

– Completed UML for application classes.

– Flow chart for every method that contains beyond sequential logic flow .

– Generated javadocs structure. – Input and output files Grading:

– Naming standard followed for project files – 2%

– Input and output files – 2%

– Javadoc structure – 5%

– Project compiled without error – 91%

– Proper use of internal comments, docstrings, and tags – 5%

– Self documenting field, identifier, method, static, final, and class identifiers - 5%

– Properly validated input and output files - 5%

– Properly used arrays to store data - 5%

– Correct output calculated by the Luhn algorithm and card number issuer identified – 71%

Extra Credit: - Implement the full Issuer IIN Range instead of the simplified list.

How to validate Credit Card Numbers?

Most credit card number can be validated using the Luhn algorithm, which is more or a less a glorified Modulo 10 formula!

The Luhn Formula: • Drop the last digit from the number.

The last digit is what we want to check against •

Reverse the numbers •

Multiply the digits in odd positions (1, 3, 5, etc.) by 2 and subtract 9 to all any result higher than 9

• Add all the numbers together

• The check digit (the last number of the card) is the amount that you would need to add to get a multiple of 10 (Modulo 10)

Luhn Example: Steps Total Total

Original Number: 4 5 5 6 7 3 7 5 8 6 8 9 9 8 5 5

Drop the last digit: 4 5 5 6 7 3 7 5 8 6 8 9 9 8 5

Reverse the digits: 5 8 9 9 8 6 8 5 7 3 7 6 5 5 4

Multiple odd digits by 2: 10 8 18 9 16 6 16 5 14 3 14 6 10 5 8

Add digits from line above 1 8 9 9 7 6 7 5 5 3 5 6 1 5 8

Add all numbers: 1 8 9 9 7 6 7 5 5 3 5 6 1 5 8 85

Mod 10: (85 + X) modulo 10 = 0 , thus X=5 (last digit of card)

List of credit card number formats Credit Card Issuer Starts With ( IIN Range ) Length ( Number of digits )

American Express 34, 37 15

Diners Club - Carte Blanche 300, 301, 302, 303, 304, 305 14

Diners Club - International 36 14

Diners Club - USA & Canada 54 16

Discover 6011, 622126 to 622925, 644, 645, 646, 647, 648, 649, 65 16

InstaPayment 637, 638, 639 16

JCB 3528 to 3589 16

Laser 6304, 6706, 6771, 6709 16-19

Maestro 5018, 5020, 5038, 5893, 6304, 6759, 6761, 6762, 6763 16-19

MasterCard 51, 52, 53, 54, 55 16-19

Visa 4 13-16

Visa Electron 4026, 417500, 4508, 4844, 4913, 4917 16

Data to Evaluate

3158539628375348

3337465828248404

3112804683572030

3112804683572033

5435528978467581

6706465468107999

6304362971054667

6706169762827894

6706169762827892

4844104341377697

4913405490886727

4844885754351829

4844885754351822

6371473570875275

6381475006869978

6389057917814806

347100734345549

347100734345543

6011162533805000

6011621663574413

6011824617460743

6011824617460745

6389057917814802

4539318768050385

36880982786892

36845793345501

36661154562232

36661154562234

5893329089846994

6761680165952016

6763100400984029

6763100400984022

5127043299122389

5330838017737340

5429168755154025

5429168755154023

375354034606481

379570632133224

4485521241443135

4532916206508075

4532916206508076

5590976687287124

5540641137519895

5540641137519892

30522070708059

30066552673241

30365487186802

30365487186801

Simplified Issuer Codes for Final Project:

VISA: 45 44

MasterCard: 51 53

American Express (AMEX):37 34

Discover: 60

JCB: 31 33

Diners Club - North America: 54 55

Diners Club - Carte Blanche:30

Diners Club - International: 36

Maestro: 58

LASER: 67

Visa Electron:48 49

InstaPayment: 63

HERE IS THE CODE BUT WHEN I RUN USING BLUE J IS NOT WORKING

import java.io.PrintWriter; import java.util.Scanner; import java.io.File; public class CardValidation { public static void main(String args[]) { String Valid_numbers[] = new String[50]; String Invalid_numbers[] = new String[50]; String Cards[] = new String[50]; int V_count = 0, Inv_count = 0, count = 0; try { Scanner inp = new Scanner(new File("DataEval.txt")); while (inp.hasNextLine()) { Cards[count] = inp.nextLine(); count++; } inp.close(); } catch (Exception e) { e.printStackTrace(); } System.out.println(" Card number Card Issuer"); for (int i = 0; i < count; i++) { if (Cards[i].length() >= 13 && Cards[i].length() <= 19) { System.out.printf("%20s %s ", Cards[i], Issuer(Cards[i])); if (isValidCard(Cards[i])) { Valid_numbers[V_count] = Cards[i]; V_count++; } else { Invalid_numbers[Inv_count] = Cards[i]; Inv_count++; } } else { System.out.println("Length of the card number is not valid."); } } try { PrintWriter vPrint = new PrintWriter(new File("valid.txt")); for (int i = 0; i < V_count; i++) vPrint.println(Valid_numbers[i]); vPrint.close(); PrintWriter invPrint = new PrintWriter(new File( "invalid.txt")); for (int i = 0; i < Inv_count; i++) invPrint.println(Invalid_numbers[i]); invPrint.close(); } catch (Exception e) { e.printStackTrace(); } } public static boolean isValidCard(String cards) { int val[] = new int[cards.length()]; for (int i = 0; i < cards.length(); i++) { val[i] = Integer.parseInt(cards.charAt(i) + ""); } int x = LastDigitDrop(val); int reverse[] = DigitsReverse(val); int multiplyOdd[] = OddDigitsdouble(reverse); int addDigits[] = DigitsAdd(multiplyOdd); int sum = 0; for (int i = 0; i < addDigits.length; i++) sum += addDigits[i]; boolean validate = valid(sum, x); if (validate) return true; else return false; } public static int LastDigitDrop(int[] cardNumber) { return cardNumber[cardNumber.length - 1]; } public static int[] DigitsReverse(int[] cardNumber) { int revrs[] = new int[cardNumber.length]; for (int i = 0; i < cardNumber.length; i++) { revrs[i] = cardNumber[cardNumber.length - 1 - i]; } return revrs; } public static int[] OddDigitsdouble(int[] revrs) { int Odds[] = new int[revrs.length]; for (int i = 0; i < revrs.length; i++) { if (i % 2 == 0) { Odds[i] = revrs[i] * 2; } else { Odds[i] = revrs[i]; } } return Odds; } public static int[] DigitsAdd(int[] mulOdd) { int sumDig[] = new int[mulOdd.length]; int first, second; for (int i = 0; i < mulOdd.length; i++) { if (mulOdd[i] >= 10) { first = mulOdd[i] / 10; second = mulOdd[i] % 10; sumDig[i] = first + second; } else if (mulOdd[i] < 10) { sumDig[i] = mulOdd[i]; } } return sumDig; } public static boolean valid(int s, int x) { if ((s + x) % 10 == 0) return true; else return false; } public static String Issuer(String cardNumber) { String start2Chars = cardNumber.substring(0, 2); int val = Integer.parseInt(start2Chars); if (val == 34 || val == 37) return "American Express"; else if (val == 45 || val == 44) return "VISA"; else if (val == 51 || val == 53) return "MasterCard"; else if (val == 60) return "Discover"; else if (val == 31 || val == 33) return "JCB"; else if (val == 54 || val == 55) return "Diners Club - North America"; else if (val == 30) return "Diners Club - Carte Blanche"; else if (val == 36) return "Diners Club - International"; else if (val == 58) return "Maestro"; else if (val == 67) return "LASER"; else if (val == 48 || val == 49) return "Visa Electron"; else if (val == 63) return "InstaPayment"; else return "Not issued by any"; } }

NEED HELP TO FIX THIS CODE TO RUN USING BLUE J

Explanation / Answer

Hi,

Please see below the updated working class.

CardValidation.java

import java.io.PrintWriter;
import java.util.Scanner;
import java.io.File;

public class CardValidation {
   public static void main(String args[]) {
       String Valid_numbers[] = new String[50];
       String Invalid_numbers[] = new String[50];
       String Cards[] = new String[50];
       int V_count = 0, Inv_count = 0, count = 0;
       try {
           Scanner inp = new Scanner(new File("DataEval.txt"));
           while (inp.hasNextLine()) {
               Cards[count] = inp.nextLine();
               count++;
           }
           inp.close();
       } catch (Exception e) {
           e.printStackTrace();
       }
       System.out.println(" Card number Card Issuer");
       for (int i = 0; i < count; i++) {
           if (Cards[i].length() >= 13 && Cards[i].length() <= 19) {
               System.out.printf("%20s %s ", Cards[i], Issuer(Cards[i]));
               if (isValidCard(Cards[i])) {
                   Valid_numbers[V_count] = Cards[i];
                   V_count++;
               } else {
                   Invalid_numbers[Inv_count] = Cards[i];
                   Inv_count++;
               }
           } else {
               System.out.println("Length of the card number is not valid.");
           }
       }
       try {
           PrintWriter vPrint = new PrintWriter(new File("valid_cards.txt"));
           for (int i = 0; i < V_count; i++)
               vPrint.println(Valid_numbers[i]);
           vPrint.flush();
           vPrint.close();
           PrintWriter invPrint = new PrintWriter(new File("invalid_numbers.txt"));
           for (int i = 0; i < Inv_count; i++)
               invPrint.println(Invalid_numbers[i]);
           invPrint.flush();
           invPrint.close();
       } catch (Exception e) {
           e.printStackTrace();
       }
   }

   public static boolean isValidCard(String cards) {
       int val[] = new int[cards.length()];
       for (int i = 0; i < cards.length(); i++) {
           val[i] = Integer.parseInt(cards.charAt(i) + "");
       }
       int x = LastDigitDrop(val);
       int reverse[] = DigitsReverse(val);
       int multiplyOdd[] = OddDigitsdouble(reverse);
       int addDigits[] = DigitsAdd(multiplyOdd);
       int sum = 0;
       for (int i = 0; i < addDigits.length; i++)
           sum += addDigits[i];
       boolean validate = valid(sum, x);
       if (validate)
           return true;
       else
           return false;
   }

   public static int LastDigitDrop(int[] cardNumber) {
       return cardNumber[cardNumber.length - 1];
   }

   public static int[] DigitsReverse(int[] cardNumber) {
       int revrs[] = new int[cardNumber.length];
       for (int i = 0; i < cardNumber.length; i++) {
           revrs[i] = cardNumber[cardNumber.length - 1 - i];
       }
       return revrs;
   }

   public static int[] OddDigitsdouble(int[] revrs) {
       int Odds[] = new int[revrs.length];
       for (int i = 0; i < revrs.length; i++) {
           if (i % 2 == 0) {
               Odds[i] = revrs[i] * 2;
           } else {
               Odds[i] = revrs[i];
           }
       }
       return Odds;
   }

   public static int[] DigitsAdd(int[] mulOdd) {
       int sumDig[] = new int[mulOdd.length];
       int first, second;
       for (int i = 0; i < mulOdd.length; i++) {
           if (mulOdd[i] >= 10) {
               first = mulOdd[i] / 10;
               second = mulOdd[i] % 10;
               sumDig[i] = first + second;
           } else if (mulOdd[i] < 10) {
               sumDig[i] = mulOdd[i];
           }
       }
       return sumDig;
   }

   public static boolean valid(int s, int x) {
       if ((s + x) % 10 == 0)
           return true;
       else
           return false;
   }

   public static String Issuer(String cardNumber) {
       String start2Chars = cardNumber.substring(0, 2);
       int val = Integer.parseInt(start2Chars);
       if (val == 34 || val == 37)
           return "American Express";
       else if (val == 45 || val == 44)
           return "VISA";
       else if (val == 51 || val == 53)
           return "MasterCard";
       else if (val == 60)
           return "Discover";
       else if (val == 31 || val == 33)
           return "JCB";
       else if (val == 54 || val == 55)
           return "Diners Club - North America";
       else if (val == 30)
           return "Diners Club - Carte Blanche";
       else if (val == 36)
           return "Diners Club - International";
       else if (val == 58)
           return "Maestro";
       else if (val == 67)
           return "LASER";
       else if (val == 48 || val == 49)
           return "Visa Electron";
       else if (val == 63)
           return "InstaPayment";
       else
           return "Not issued by any";
   }
}

valid_cards.txt

6381475006869978
36661154562234
6763100400984022
379570632133224

invalid_numbers.txt

3158539628375348
3337465828248404
3112804683572030
3112804683572033
5435528978467581
6706465468107999
6304362971054667
6706169762827894
6706169762827892
4844104341377697
4913405490886727
4844885754351829
4844885754351822
6371473570875275
6389057917814806
347100734345549
347100734345543
6011162533805000
6011621663574413
6011824617460743
6011824617460745
6389057917814802
4539318768050385
36880982786892
36845793345501
36661154562232
5893329089846994
6761680165952016
6763100400984029
5127043299122389
5330838017737340
5429168755154025
5429168755154023
375354034606481
4485521241443135
4532916206508075
4532916206508076
5590976687287124
5540641137519895
5540641137519892
30522070708059
30066552673241
30365487186802
30365487186801

Sample output

   Card number        Card Issuer
3158539628375348    JCB
3337465828248404    JCB
3112804683572030    JCB
3112804683572033    JCB
5435528978467581    Diners Club - North America
6706465468107999    LASER
6304362971054667    InstaPayment
6706169762827894    LASER
6706169762827892    LASER
4844104341377697    Visa Electron
4913405490886727    Visa Electron
4844885754351829    Visa Electron
4844885754351822    Visa Electron
6371473570875275    InstaPayment
6381475006869978    InstaPayment
6389057917814806    InstaPayment
347100734345549    American Express
347100734345543    American Express
6011162533805000    Discover
6011621663574413    Discover
6011824617460743    Discover
6011824617460745    Discover
6389057917814802    InstaPayment
4539318768050385    VISA
36880982786892    Diners Club - International
36845793345501    Diners Club - International
36661154562232    Diners Club - International
36661154562234    Diners Club - International
5893329089846994    Maestro
6761680165952016    LASER
6763100400984029    LASER
6763100400984022    LASER
5127043299122389    MasterCard
5330838017737340    MasterCard
5429168755154025    Diners Club - North America
5429168755154023    Diners Club - North America
375354034606481    American Express
379570632133224    American Express
4485521241443135    VISA
4532916206508075    VISA
4532916206508076    VISA
5590976687287124    Diners Club - North America
5540641137519895    Diners Club - North America
5540641137519892    Diners Club - North America
30522070708059    Diners Club - Carte Blanche
30066552673241    Diners Club - Carte Blanche
30365487186802    Diners Club - Carte Blanche
30365487186801    Diners Club - Carte Blanche

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote