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

Java Code need help writing this program Get input from file. Ask user at least

ID: 3772420 • Letter: J

Question

Java Code

need help writing this program

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.

Explanation / Answer

import java.util.regex.Matcher;

import java.util.regex.Pattern;

/**

* This module provides static methods for credit card validation based on

* Luhn's algorithm <br>

*

*/    

public final class CardValidator {

    private CardValidator() {}

    private static int[] array;

    private static int doubleNumber;

    private static int length;

    private static String number;

    private static int sum;

    private static final String MAESTRO = "(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{8}|(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{9}|(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{10}|(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{11}|(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{12}|(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{13}|(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{14}|(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{15}$";

    private static final String MASTERCARD = "^(?!.*(?:(?:5018|5020|5038\d{12})))[5][0-5].{14}$";

    private static final String SOLO = "(6334|6767)\d{12}|(6334|6767)\d{14}|(6334|6767)\d{15}";

    private static final String SWITCH = "(4903|4905|4911|4936|6333|6759)\d{12}|(4903|4905|4911|4936|6333|6759)\d{14}|(4903|4905|4911|4936|6333|6759)\d{15}|(564182|633110)\d{10}|(564182|633110)\d{12}|(564182|633110)\d{13}$";

    private static final String VISA = "^(?!.*(?:(?:4026|4405|4508|4844|4913|4917)\d{12}|417500\d{10}))4\d{15}$";

    private static final String VISA_ELECTRON = "(4026|4405|4508|4844|4913|4917)\d{12}|417500\d{10}$";

    /**

     * Returns the concatenation of {@code number} with a valid check digit.

     *

     * @param number    the number to which a check digit will be added.

     * @return          the concatenation of {@code number} with it's valid

     *                  check digit.

     */

    public static String getCardNumber(String number) {

        return number + Integer.toString(getCheckDigit(number));

    }

    /**

     * Returns the name of the card vendor for {@code cardNumber}.

     *

     * @param cardNumber

     * @return the card vendor (if known) <br>

     *          {@code else} returns an empty string

     */

    public static String getCardVendor(String cardNumber) {

            if (isVisa(cardNumber)) { return "Visa"; }

            else if (isVisaElectron(cardNumber)) { return "Visa Electron"; }

            else if (isMasterCard(cardNumber)) { return "MasterCard"; }

            else if (isMaestro(cardNumber)) { return "Maestro"; }

            else if (isSolo(cardNumber)) { return "Solo"; }

          else if (isSwitch(cardNumber)) { return "Switch"; }

            else return "";

    }

    /**

     * Returns the valid check digit for {@code number}.

     *

     * @param number    the number for the check digit to be generated.

     * @return          the valid check digit for {@code number}.

     */

    public static int getCheckDigit(String number) {

        getStringLength(number);

        toIntArray(number);

        sum = 0;

        for (int i=length-1;i>=0;i-=2) {

            doubleNumber = array[i]*2;

            if (doubleNumber == 10) { sum += 1; }

            else if (doubleNumber > 10) { sum += 1 + (doubleNumber % 10); }

            else { sum += doubleNumber; }

        }

        for (int i=length-2;i>=1;i-=2) {

            sum += array[i];

        }

        if (sum % 10 != 0) {

            return 10 - (sum % 10);

        }

        else { return 0; }

    }

    private static void getStringLength(String number) {

        length = number.length();

    }

    /**

     * Returns a string with any non-digit characters removed from

     * {@code str}.

     *

     * @param str   the string to have non-digits removed from.

     * @return      a string containing only numerical digits.

     */

    public static String removeNonDigits(String str) {

        return str.replaceAll("\D", "");

    }

    /**

     * Validates {@code cardNumber}.

     *

     * @param cardNumber    the card number to be validated.

     * @return              {@code true} if the card number is valid <br>

     *                      {@code false} if the card number is invalid

     */

    public static boolean validate(String cardNumber) {

        number = removeNonDigits(cardNumber);

        if (number == null || number == "") {

            return false;

        }  

        getStringLength(number);

        array = toIntArray(cardNumber);

        sum = 0;

        for (int i=length-2;i>=0;i-=2) {

            doubleNumber = array[i]*2;

            if (doubleNumber == 10) { sum += 1; }

            else if (doubleNumber > 10) { sum += 1 + (doubleNumber % 10); }

            else { sum += doubleNumber; }

        }

        for (int i=length-1;i>=1;i-=2) {

            sum += array[i];

        }

        return sum % 10 == 0;

    }

    private static int[] toIntArray(String number) {

        int length = number.length();

        int[] intArray = new int[length];

        for (int i = 0; i < length; i++) {

            intArray[i] = Integer.parseInt(number.substring(i, i+1));

        }

        return intArray;

    }

    private static boolean isMaestro(String number) {

        Pattern p = Pattern.compile(MAESTRO);

        Matcher m = p.matcher(number);

        return m.matches();

    }

    private static boolean isMasterCard(String number) {

        Pattern p = Pattern.compile(MASTERCARD);

        Matcher m = p.matcher(number);

        return m.matches();

    }

    private static boolean isSolo(String number) {

        Pattern p = Pattern.compile(SOLO);

        Matcher m = p.matcher(number);

        return m.matches();

    }

    private static boolean isSwitch(String number) {

        Pattern p = Pattern.compile(SWITCH);

        Matcher m = p.matcher(number);

        return m.matches();

    }

    private static boolean isVisa(String number) {

        Pattern p = Pattern.compile(VISA);

        Matcher m = p.matcher(number);

        return m.matches();

    }

    private static boolean isVisaElectron(String number) {

        Pattern p = Pattern.compile(VISA_ELECTRON);

        Matcher m = p.matcher(number);

        return m.matches();

    }

}


I hope that someone could review a module I wrote for bank card validation. I included a class that tests some of the methods, which is purely to show the methods work, rather than unit testing.

Validator

import java.util.regex.Matcher;

import java.util.regex.Pattern;

/**

* This module provides static methods for credit card validation based on

* Luhn's algorithm <br>

*

*

* @author NRKirby

*

*/    

public final class CardValidator {

    private CardValidator() {}

    private static int[] array;

    private static int doubleNumber;

    private static int length;

    private static String number;

    private static int sum;

    private static final String MAESTRO = "(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{8}|(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{9}|(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{10}|(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{11}|(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{12}|(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{13}|(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{14}|(5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)\d{15}$";

    private static final String MASTERCARD = "^(?!.*(?:(?:5018|5020|5038\d{12})))[5][0-5].{14}$";

    private static final String SOLO = "(6334|6767)\d{12}|(6334|6767)\d{14}|(6334|6767)\d{15}";

    private static final String SWITCH = "(4903|4905|4911|4936|6333|6759)\d{12}|(4903|4905|4911|4936|6333|6759)\d{14}|(4903|4905|4911|4936|6333|6759)\d{15}|(564182|633110)\d{10}|(564182|633110)\d{12}|(564182|633110)\d{13}$";

    private static final String VISA = "^(?!.*(?:(?:4026|4405|4508|4844|4913|4917)\d{12}|417500\d{10}))4\d{15}$";

    private static final String VISA_ELECTRON = "(4026|4405|4508|4844|4913|4917)\d{12}|417500\d{10}$";

    /**

     * Returns the concatenation of {@code number} with a valid check digit.

     *

     * @param number    the number to which a check digit will be added.

     * @return          the concatenation of {@code number} with it's valid

     *                  check digit.

     */

    public static String getCardNumber(String number) {

        return number + Integer.toString(getCheckDigit(number));

    }

    /**

     * Returns the name of the card vendor for {@code cardNumber}.

     *

     * @param cardNumber

     * @return the card vendor (if known) <br>

     *          {@code else} returns an empty string

     */

    public static String getCardVendor(String cardNumber) {

            if (isVisa(cardNumber)) { return "Visa"; }

            else if (isVisaElectron(cardNumber)) { return "Visa Electron"; }

            else if (isMasterCard(cardNumber)) { return "MasterCard"; }

            else if (isMaestro(cardNumber)) { return "Maestro"; }

            else if (isSolo(cardNumber)) { return "Solo"; }

          else if (isSwitch(cardNumber)) { return "Switch"; }

            else return "";

    }

    /**

     * Returns the valid check digit for {@code number}.

     *

     * @param number    the number for the check digit to be generated.

     * @return          the valid check digit for {@code number}.

     */

    public static int getCheckDigit(String number) {

        getStringLength(number);

        toIntArray(number);

        sum = 0;

        for (int i=length-1;i>=0;i-=2) {

            doubleNumber = array[i]*2;

            if (doubleNumber == 10) { sum += 1; }

            else if (doubleNumber > 10) { sum += 1 + (doubleNumber % 10); }

            else { sum += doubleNumber; }

        }

        for (int i=length-2;i>=1;i-=2) {

            sum += array[i];

        }

        if (sum % 10 != 0) {

            return 10 - (sum % 10);

        }

        else { return 0; }

    }

    private static void getStringLength(String number) {

        length = number.length();

    }

    /**

     * Returns a string with any non-digit characters removed from

     * {@code str}.

     *

     * @param str   the string to have non-digits removed from.

     * @return      a string containing only numerical digits.

     */

    public static String removeNonDigits(String str) {

        return str.replaceAll("\D", "");

    }

    /**

     * Validates {@code cardNumber}.

     *

     * @param cardNumber    the card number to be validated.

     * @return              {@code true} if the card number is valid <br>

     *                      {@code false} if the card number is invalid

     */

    public static boolean validate(String cardNumber) {

        number = removeNonDigits(cardNumber);

        if (number == null || number == "") {

            return false;

        }  

        getStringLength(number);

        array = toIntArray(cardNumber);

        sum = 0;

        for (int i=length-2;i>=0;i-=2) {

            doubleNumber = array[i]*2;

            if (doubleNumber == 10) { sum += 1; }

            else if (doubleNumber > 10) { sum += 1 + (doubleNumber % 10); }

            else { sum += doubleNumber; }

        }

        for (int i=length-1;i>=1;i-=2) {

            sum += array[i];

        }

        return sum % 10 == 0;

    }

    private static int[] toIntArray(String number) {

        int length = number.length();

        int[] intArray = new int[length];

        for (int i = 0; i < length; i++) {

            intArray[i] = Integer.parseInt(number.substring(i, i+1));

        }

        return intArray;

    }

    private static boolean isMaestro(String number) {

        Pattern p = Pattern.compile(MAESTRO);

        Matcher m = p.matcher(number);

        return m.matches();

    }

    private static boolean isMasterCard(String number) {

        Pattern p = Pattern.compile(MASTERCARD);

        Matcher m = p.matcher(number);

        return m.matches();

    }

    private static boolean isSolo(String number) {

        Pattern p = Pattern.compile(SOLO);

        Matcher m = p.matcher(number);

        return m.matches();

    }

    private static boolean isSwitch(String number) {

        Pattern p = Pattern.compile(SWITCH);

        Matcher m = p.matcher(number);

        return m.matches();

    }

    private static boolean isVisa(String number) {

        Pattern p = Pattern.compile(VISA);

        Matcher m = p.matcher(number);

        return m.matches();

    }

    private static boolean isVisaElectron(String number) {

        Pattern p = Pattern.compile(VISA_ELECTRON);

        Matcher m = p.matcher(number);

        return m.matches();

    }

}

Test

public class CardValidatorTest {

    public static void main(String[] args) {

        System.out.println(CardValidator.validate("5522139001463839"));

        System.out.println(CardValidator.validate("4751290028474914"));

        System.out.println(CardValidator.validate("6011000990139424"));

        System.out.println(CardValidator.validate("5555555555554444"));

        System.out.println(CardValidator.validate("515105105105100"));

        System.out.println(CardValidator.validate("4111111111111111"));

        System.out.println(CardValidator.validate("4012888888881881"));

        System.out.println(CardValidator.validate("6331101999990016"));

        System.out.println(CardValidator.getCheckDigit("475129002698491"));

        System.out.println(CardValidator.getCheckDigit("552213900896383"));

        System.out.println(CardValidator.getCardNumber("552213969846383"));

        System.out.println(CardValidator.getCardVendor("5018000000000000"));

        System.out.println(CardValidator.getCardVendor("6334000000000000"));

        System.out.println(CardValidator.getCardVendor("5522139698463839"));

        System.out.println(CardValidator.getCardVendor("5018139564463839"));

    }

}

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