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

\"This is In JAVA\" Credit card numbers follow certain patterns. A credit card n

ID: 647034 • Letter: #

Question

"This is In JAVA"

Credit card numbers follow certain patterns. A credit card number must have between 13 and 16 digits. It must start with:

4 for Visa cards

5 for Master cards

37 for American Express cards

6 for Discover cards

Almost all credit card numbers are generated following this validity check, which can be described as follows (for illustration, consider the card number 4388576018402626):

Double every second digit from right to left. If doubling of a digit results in a two-digit number, add up the two digits to get a single-digit number.

2 * 2 = 4

2 * 2 = 4

4 * 2 = 8

1 * 2 = 2

6 * 2 = 12 (1 + 2 = 3)

5 * 2 = 10 (1 + 0 = 1)

8 * 2 = 16 (1 + 6 = 7)

4 * 2 = 8

Now add all single-digit numbers from Step 1. 4 + 4 + 8 + 2 + 3 + 1 + 7 + 8 = 37

Add all digits in the odd places from right to left in the card number. 6 + 6 + 0 + 8 + 0 + 7 + 8 + 3 = 38

Sum the results from Step 2 and Step 3. 37 + 38 = 75

If the result from Step 4 is divisible by 10, the card number is valid; otherwise, it is invalid. For example, the number 4388576018402626 is invalid, but the number 4388576018410707 is valid.

Functions:

// Return a integer showing whether number is valid, if not, why

public static int isValid(long number)

// Get the result form Step 2

public static int sumOfDoubleEvenPlace(long number)

// Return this number is it is a single digit, otherwise, return the sum of the two digits

public static int getDigit(int number)

// Return sum of odd-place digits in number

public static int sumOfOddPlace(long number)

// return true if the digit d is a prefix for number;

public static boolean prefixMatched(long number, int d)

//Return the number of digits in d

public static int getSize(long d)

// return the first k number of digits from number. If the number of digits in number is less than k, return number

public static long getPrefix(long number, int k)

Explanation / Answer

CreditCardValidation.java

import java.util.Scanner;

public class CreditCardValidation {

   //check for number is valid or not
    public static boolean isValid(long number) {

        int total = sumOfDoubleEvenPlace(number) + sumOfOddPlace(number);


        if ((total % 10 == 0) && (prefixMatched(number, 1) == true) && (getSize(number)>=13 ) && (getSize(number)<=16 )) {
            return true;
        } else {
            return false;
        }
    }

    public static int getDigit(int number) {

        if (number <= 9) {
            return number;
        } else {
            int firstDigit = number % 10;
            int secondDigit = (int) (number / 10);

            return firstDigit + secondDigit;
        }
    }
    // to add all digits in the odd places from right to left in the card number
    public static int sumOfOddPlace(long number) {
        int result = 0;

        while (number > 0) {
            result += (int) (number % 10);
            number = number / 100;
        }

        return result;
    }

    public static int sumOfDoubleEvenPlace(long number) {

        int result = 0;
        long temp = 0;

        while (number > 0) {
            temp = number % 100;
            result += getDigit((int) (temp / 10) * 2);
            number = number / 100;
        }

        return result;
    }
// To show the type of card after validation
    public static boolean prefixMatched(long number, int d) {

        if ((getPrefix(number, d) == 4)
                || (getPrefix(number, d) == 5)
                || (getPrefix(number, d) == 3)
                ||(getPrefix(number,d) == 6)) {

            if (getPrefix(number, d) == 4) {
                System.out.println(" Visa Card ");
            } else if (getPrefix(number, d) == 5) {
                System.out.println(" Master Card ");
            } else if (getPrefix(number, d) == 3) {
                System.out.println(" American Express Card ");
            }else if(getPrefix(number,d) == 6){
               System.out.println(" Discover card");
            }

            return true;

        } else {

            return false;

        }
    }

    public static int getSize(long d) {

        int count = 0;

        while (d > 0) {
            d = d / 10;

            count++;
        }

        return count;

    }

    public static long getPrefix(long number, int k) {

        if (getSize(number) < k) {
            return number;
        } else {

            int size = (int) getSize(number);

            for (int i = 0; i < (size - k); i++) {
                number = number / 10;
            }

            return number;

        }

    }

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        System.out.print("Enter a credit card number as a long integer: ");

        long input = sc.nextLong();


        if (isValid(input) == true) {
            System.out.println(" " + input + " is Valid. ");
        } else {
            System.out.println(" " + input + " is Invalid. ");
        }

    }
}

output:

Enter a credit card number as a long integer: 4111111111111111

Visa Card

4111111111111111 is Valid.


output2:

Enter a credit card number as a long integer: 378282246310005

American Express Card

378282246310005 is Valid.