\"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.
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.