Advertisement
Guest User

Untitled

a guest
Feb 25th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.00 KB | None | 0 0
  1. /**     MidTerm Project
  2.  * Created by Tseliso on 2/21/2017.
  3.  *
  4.  *  new StringBuilder()
  5.  */
  6. import java.util.Scanner;
  7. public class Banker {
  8.     public static void main(String[] args) {
  9.         Scanner input = new Scanner(System.in);
  10.         long card;
  11.         do {
  12.             System.out.println("Please enter a valid credit card number. Enter the number '0' to end.");
  13.             card = input.nextLong();
  14.  
  15.             if (isValid(card)) {
  16.                 System.out.println("This is a valid card.");
  17.             } else {
  18.                 System.out.println("Card invalid, please try again.");
  19.             }
  20.         } while (card != 0);
  21.     }
  22.  
  23.  
  24.     /**
  25.      * Return true if the card number is valid
  26.      */
  27.     public static boolean isValid(long number) {
  28.         int evenSpots = 0;
  29.         int oddSpots = 0;
  30.         boolean length = false;
  31.         boolean numbers = false;
  32.  
  33.         //Check Card length
  34.         if (getSize(number) > 0) {
  35.             System.out.println("Size GOOD");
  36.  
  37.             //Check for correct starting numbers, using OR instead of a bunch of if
  38.             if (prefixMatched(number, 37) || prefixMatched(number, 6)
  39.                     || prefixMatched(number, 5) || prefixMatched(number, 4)) {
  40.                 System.out.println("Starting number GOOD");
  41.                 //check to see if the card starts with the appropriate number THEN a
  42.                 evenSpots = sumOfDoubleEvenPlace(number);
  43.                 oddSpots = sumOfOddPlace(number);
  44.                 int total = evenSpots + oddSpots;
  45.                 if (total % 10 == 0)
  46.                 {
  47.                     numbers = true;
  48.                     length = true;
  49.                 }
  50.                 else
  51.                 {
  52.                     System.out.println("Fail");
  53.                 }
  54.  
  55.  
  56.             }
  57.  
  58.  
  59.         }
  60.         //System.out.print("Invalid Card length!");
  61.  
  62.  
  63.         // Full validation Check
  64.         if (length && numbers) {
  65.             return true;
  66.         } else {
  67.             System.out.println("length: " + length + ", numbers: " + numbers);
  68.             return false;
  69.         }
  70.     }
  71.  
  72.     /** Get the result from Step 2 */
  73.     public static int sumOfDoubleEvenPlace(long number){
  74.         int sum = 0;
  75.  
  76.         String numToString = Long.toString(number);
  77.         int amtDigits = String.valueOf(number).length();
  78.         System.out.println(amtDigits);
  79.         for (int i = 1; i < numToString.length(); i+=2 /*decrement by two to skip the odd places.*/)
  80.         {
  81.             System.out.println("adding " + (getDigit(Character.getNumericValue(numToString.charAt(i)))) *2);
  82.  
  83.             sum += (getDigit(Character.getNumericValue(numToString.charAt(i)))*2);
  84.         }
  85.  
  86.         System.out.println("SumOfDoubleEvenPlace: " + sum);
  87.  
  88.         return sum;
  89.     }
  90.  
  91.     /** Return this number if it is a single digit, otherwise,
  92.      * return the sum of the two digits */
  93.     public static int getDigit(int number) {
  94.         //int num = Integer.toString(number).length();
  95.         // Big fail, lots of errors
  96.         if ( Integer.toString(number).length() == 1) {
  97.             //System.out.println("Get digit" + number);
  98.  
  99.             return number;
  100.         }
  101.         else {
  102.             //System.out.println("Get digit" + number);
  103.  
  104.             return ((number % 10) + 1);
  105.         }
  106.     }
  107. //////////////////////////////////////////////////////////////////////////////////////////////////////
  108.     /** Return sum of odd-place digits in number */
  109.     public static int sumOfOddPlace(long number){
  110.         int sum = 0;
  111.         String numToString = Long.toString(number);
  112.  
  113.         for (int i = 0; i < numToString.length(); i +=2 /*increment by two to skip the even places.*/)
  114.             sum += getDigit(Character.getNumericValue(numToString.charAt(i)));
  115.         System.out.println("SumOfOddPlace: " + sum);
  116.         return sum;
  117.     }
  118.  
  119.     /** Return true if the digit d is a prefix for number */
  120.     public static boolean prefixMatched(long number, int d){
  121.         int numLength = new StringBuilder(Integer.toString(d)).length();
  122.         String numberString = Long.toString(number);
  123.         String dString = Integer.toString(d);
  124.  
  125.         //increment through the length of the number
  126.         for (int i = 0; i < numLength; i++)
  127.             // if the number isn't one of the 4 acceptable then return false.
  128.             if(numberString.charAt(i) != dString.charAt(i))
  129.                 return false;
  130.  
  131.         return true;
  132.     }
  133.  
  134.     /** Return the number of digits in d */
  135.     public static int getSize(long d){
  136.         int numL = Long.toString(d).length();
  137.         if (numL > 13 && numL <= 16 ) {
  138.             return numL;
  139.         }
  140.         else
  141.             return 0;
  142.     }
  143.  
  144.     /** Return the first k number of digits from number. If the
  145.      * number of digits in number is less than k, return number. */
  146.     public static long getPrefix(long number, int k) {
  147.         long ans = number;
  148.         for (int i = 0; i < getSize(number) - (k); i++)
  149.             ans /= 10;
  150.         return ans;
  151.     }
  152.  
  153.  
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement