Question: import java.util.Scanner; public class CreditCard { public static void main(String[] args) { long cardNumber = 0; Scanner input = new Scanner(System.in); //Scanner System.out.print(Enter credit card
import java.util.Scanner;
public class CreditCard {
public static void main(String[] args) {
long cardNumber = 0;
Scanner input = new Scanner(System.in); //Scanner
System.out.print("Enter credit card number as a long integer: ");
cardNumber = input.nextLong();
if(isValid(cardNumber)) {
System.out.println( cardNumber + " is valid.");
} else {
System.out.println(cardNumber + " is invalid.");
}
}
/** Return true if the card number is valid */
public static boolean isValid(long number) {
//Big test condition - right sum, number of digits, prefix
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;
}
/** Get the result from Step 2 */
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;
}
/** Return this number if it is a single digit, otherwise, return
* the sum of the two digits */
public static int getDigit(int number) {
return ((number - number % 10) / 10 ) + number % 10;
}
/** Return sum of odd place digits in number */
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;
}
/** Return true if the digit d is a prefix for number */
public static boolean prefixMatched(long number,int d) {
if( getPrefix(number, getSize(d)) == d ) return true;
else return false;
}
/** Return the number of digits in d */
public static int getSize(long d) {
int n = 0;
while(d != 0) {
d /= 10;
n++;
}
return n;
}
/** 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) {
int numberOfDigits = getSize(number);
if(numberOfDigits - k > 0) {
for ( int i = 0; i < numberOfDigits - k; i++) {
number /= 10;
}
return number;
} else return number;
}
}
please make uml class diagram,flowchart and pseudocode thank you
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
