Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /** MidTerm Project
- * Created by Tseliso on 2/21/2017.
- *
- * new StringBuilder()
- */
- import java.util.Scanner;
- public class Banker {
- public static void main(String[] args) {
- Scanner input = new Scanner(System.in);
- long card;
- do {
- System.out.println("Please enter a valid credit card number. Enter the number '0' to end.");
- card = input.nextLong();
- if (isValid(card)) {
- System.out.println("This is a valid card.");
- } else {
- System.out.println("Card invalid, please try again.");
- }
- } while (card != 0);
- }
- /**
- * Return true if the card number is valid
- */
- public static boolean isValid(long number) {
- int evenSpots = 0;
- int oddSpots = 0;
- boolean length = false;
- boolean numbers = false;
- //Check Card length
- if (getSize(number) > 0) {
- System.out.println("Size GOOD");
- //Check for correct starting numbers, using OR instead of a bunch of if
- if (prefixMatched(number, 37) || prefixMatched(number, 6)
- || prefixMatched(number, 5) || prefixMatched(number, 4)) {
- System.out.println("Starting number GOOD");
- //check to see if the card starts with the appropriate number THEN a
- evenSpots = sumOfDoubleEvenPlace(number);
- oddSpots = sumOfOddPlace(number);
- int total = evenSpots + oddSpots;
- if (total % 10 == 0)
- {
- numbers = true;
- length = true;
- }
- else
- {
- System.out.println("Fail");
- }
- }
- }
- //System.out.print("Invalid Card length!");
- // Full validation Check
- if (length && numbers) {
- return true;
- } else {
- System.out.println("length: " + length + ", numbers: " + numbers);
- return false;
- }
- }
- /** Get the result from Step 2 */
- public static int sumOfDoubleEvenPlace(long number){
- int sum = 0;
- String numToString = Long.toString(number);
- int amtDigits = String.valueOf(number).length();
- System.out.println(amtDigits);
- for (int i = 1; i < numToString.length(); i+=2 /*decrement by two to skip the odd places.*/)
- {
- System.out.println("adding " + (getDigit(Character.getNumericValue(numToString.charAt(i)))) *2);
- sum += (getDigit(Character.getNumericValue(numToString.charAt(i)))*2);
- }
- System.out.println("SumOfDoubleEvenPlace: " + sum);
- 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) {
- //int num = Integer.toString(number).length();
- // Big fail, lots of errors
- if ( Integer.toString(number).length() == 1) {
- //System.out.println("Get digit" + number);
- return number;
- }
- else {
- //System.out.println("Get digit" + number);
- return ((number % 10) + 1);
- }
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////
- /** Return sum of odd-place digits in number */
- public static int sumOfOddPlace(long number){
- int sum = 0;
- String numToString = Long.toString(number);
- for (int i = 0; i < numToString.length(); i +=2 /*increment by two to skip the even places.*/)
- sum += getDigit(Character.getNumericValue(numToString.charAt(i)));
- System.out.println("SumOfOddPlace: " + sum);
- return sum;
- }
- /** Return true if the digit d is a prefix for number */
- public static boolean prefixMatched(long number, int d){
- int numLength = new StringBuilder(Integer.toString(d)).length();
- String numberString = Long.toString(number);
- String dString = Integer.toString(d);
- //increment through the length of the number
- for (int i = 0; i < numLength; i++)
- // if the number isn't one of the 4 acceptable then return false.
- if(numberString.charAt(i) != dString.charAt(i))
- return false;
- return true;
- }
- /** Return the number of digits in d */
- public static int getSize(long d){
- int numL = Long.toString(d).length();
- if (numL > 13 && numL <= 16 ) {
- return numL;
- }
- else
- return 0;
- }
- /** 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) {
- long ans = number;
- for (int i = 0; i < getSize(number) - (k); i++)
- ans /= 10;
- return ans;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement