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

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();

       }

      

      

   }

}

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