Credit card companies typically assign a special digit, called a check digit, to
ID: 3718107 • Letter: C
Question
Credit card companies typically assign a special digit, called a check digit, to the end of each customer’s credit card number. Many methods for creating the check digit have been developed. One simple method is shown in the figure below. Allow the user to enter a five-digit credit card number, with the fifth digit being the check digit. Verify that the credit card number is valid. Display the appropriate messages indicating whether the credit card number is valid or invalid.
Your program should have the user enter a five-digit credit card number. (This should be entered as a string). First your program should ensure that the input has exactly 5 digits and that all those digits are numbers between 0 and 9. It should then duplicate the algorithm shown in the image below to generate the fifth validation digit. Finally, your program should generate a message indicating whether the credit card number was valid or invalid.
This is what I have so far but it does not work.
public class Creditcard
{
public static boolean isValid(long number)
{
if( ((sumOfOddPlace(number) + sumOfDoubleEvenPlace(number))%10 == 0 )
&& (getSize(number) <= 16 && getSize(number) >= 13)
&& (prefixMatched(number, 4)
|| prefixMatched(number, 5)
|| prefixMatched(number, 37)
|| prefixMatched(number, 6)) )
return true;
else
return false;
}
public static int sumOfDoubleEvenPlace(long number) {
int numDigits = getSize(number)-1;
int sum = 0;
number/=10;
for(int i = 0; i < numDigits; i+=2) {
sum+= getDigit((int) ( 2 * (number % 10)));
number /= 100;
}
return sum;
}
public static int getDigit(int number) {
return ((number - number % 10) / 10 ) + number % 10;
}
public static int sumOfOddPlace(long number) {
int numberOfDigits = getSize(number);
int sum = 0;
for(int i = 0; i < numberOfDigits; i+=2) {
sum+= number%10;
number /= 100;
}
return sum;
}
public static boolean prefixMatched(long number,int d) {
if( getPrefix(number, getSize(d)) == d ) return true;
else return false;
}
public static int getSize(long d) {
int n = 0;
while(d != 0) {
d /= 10;
n++;
}
return n;
}
public static long getPrefix(long number,int k) {
int numberOfDigits = getSize(number);
if(numberOfDigits - k > 0) {
for ( int i = 0; i < numberOfDigits - k; i++) {
number /= 10;
}
return number;
} else return number;
}
}
Explanation / Answer
import java.util.Scanner;
public class Creditcard
{
public static boolean isValid(long number)
{
if( ((sumOfOddPlace(number) + sumOfDoubleEvenPlace(number))%10 == 0 )
&& (getSize(number) <= 16 && getSize(number) >= 13)
&& (prefixMatched(number, 4)
|| prefixMatched(number, 5)
|| prefixMatched(number, 37)
|| prefixMatched(number, 6)) )
return true;
else
return false;
}
public static int sumOfDoubleEvenPlace(long number) {
int numDigits = getSize(number)-1;
int sum = 0;
number/=10;
for(int i = 0; i < numDigits; i+=2) {
sum+= getDigit((int) ( 2 * (number % 10)));
number /= 100;
}
return sum;
}
public static int getDigit(int number) {
return ((number - number % 10) / 10 ) + number % 10;
}
public static int sumOfOddPlace(long number) {
int numberOfDigits = getSize(number);
int sum = 0;
for(int i = 0; i < numberOfDigits; i+=2) {
sum+= number%10;
number /= 100;
}
return sum;
}
public static boolean prefixMatched(long number,int d) {
if( getPrefix(number, getSize(d)) == d ) return true;
else return false;
}
public static int getSize(long d) {
int n = 0;
while(d != 0) {
d /= 10;
n++;
}
return n;
}
public static long getPrefix(long number,int k) {
int numberOfDigits = getSize(number);
if(numberOfDigits - k > 0) {
for ( int i = 0; i < numberOfDigits - k; i++) {
number /= 10;
}
return number;
} else return number;
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
boolean enterRight = true;
while(enterRight){
System.out.println("Plesae enter a 5 digit credit card number");
try{
String num = sc.next();
if(num.chars().count() != 5){
System.out.println("Plesae enter a valid 5 digit credit card number");
continue;
}
long numVal = Integer.parseInt(num);
if(Creditcard.isValid(numVal)){
System.out.println(" credit card number is valid");
enterRight = false;
}
else{
System.out.println(" credit card number is invalid");
enterRight = false;
}
}
catch(Exception e){
System.out.println("Plesae enter a valid 5 digit credit card number");
}
sc.close();
}
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.