Question: Overview You will be writing a Java program from scratch that checks to see if a string representing a credit card number is a valid

Overview

You will be writing a Java program from scratch that checks to see if a string representing a credit card number is a valid credit card number, based on the rules for forming credit card numbers.

Objectives

Practice with programming fundamentals

Variables - Declaration and Assignment

Primitive types

Simple keyboard input and text display output

Branching: if-else if-else syntax, nested if-else syntax

Nested while loops

Works towards the following Course Goals:

Competency with using basic coding features of a high-level imperative programming language

Competency with writing computer programs to implement given simple algorithms

Familiarity with designing simple text-oriented user interfaces

Project 06 Description

Banks issue credit cards with 16 digit numbers. If you've never thought about it before you may not realize it, but there are specific rules for what those numbers can be. For example, the first few digits of the number tell you what kind of card it is - all Visa cards start with 4, MasterCard numbers start with 51 through 55, American Express starts with 34 or 37, etc. Automated systems can use this number to tell which company to contact without having to "look" at the card itself and see what the bank is on it. Another key part of the credit card number standard is the check digit. The last digit of every credit card number is determined by the previous 15 digits through a simple mathematical formula known the Luhn Algorithm. The Lhun Algorithm can be used to check if a credit card number has been corrupted in its transmission between the vendor reading the card, and the bank which has the account. It can also be used to check to see if a credit card number is valid before transmitting it to the bank. The Luhn Algorithm is described at the link above, but the basic idea is:

From the right-to-left, double the value of each digit that is in an even-numbered position (with the check-digit at position 1). If this doubling gives you a two-digit value for any of the numbers, then add the digits together to get a single digit (or equivalently, subtract 9 from the value). Leave the odd-valued positions as is.

Sum together all of the values except the check digit.

Take the digit in the one's position of the sum. If the value of that digit is 0, then it stays as 0. If the value is greater than zoer, subtract that value from 10. That value should be the check digit (note that the special case for 0 is required since "10" is not a single digit).

For example, suppose the card you want to validate is: 5457623898234113. In this case the check-digit is 3 and the remaining digits are the 15-digit account number. We can confirm that we likely have a good card number by validating the check digit as follows:

Position 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Original Value 5 4 5 7 6 2 3 8 9 8 2 3 4 1 1 3
Doubled value 10 10 12 6 18 4 8 2
Doubled-value adjusted 1 1 3 6 9 4 8 2
Sum of values = 67 1 4 1 7 3 2 6 8 9 8 4 3 8 1 2
Check digit is 3 (10 - 7 = 3)

You can read more about credit card numbers, as well as how the Luhn Algorithm is used in other areas of Computer Science, in this article from the Data Genetics blog (where the above example was taken from). For this lab you will write a Java program that checks credit card strings to see if they are valid. Your program should first prompt the user to enter a string of numbers as a credit card number, or enter a blank line to quit the program. If the user doesn't quit, your program should ensure that this string is exactly 16 characters in length. If the user enters a string that is not 16 characters in length, your program should print an error message and ask again for a valid string. Your program should use the Luhn Algorithm above to compute what the check digit should be and then compare it to the actual value in the provided string and report whether the credit card number is valid or wrong. If it is wrong, your program should report what the correct check digit should be for the input value. Your program should keep asking for new values until the user enters a blank line to quit the program. Following the instructions from Closed Lab 01, create a new project named Project06 and a new Java program in that project folder named Project06.java for this project. You can find a selection of valid-but-fake credit card numbers courtesy of PayPal here. Change the check digit on any of them to get an invalid number (note that your code should only use the 16 digit numbers and does not have to account for the 13 digit Visa card number listed there).

Project 06 Sample Output

This is a sample transcript of what your program should do. Items in bold are user input and should not be put on the screen by your program. Enter a credit card number (enter a blank line to quit): 5457623898234112 Check digit should be: 3 Check digit is: 2 Number is not valid Enter a credit card number (enter a blank line to quit): 5457623898234113 Check digit should be: 3 Check digit is: 3 Number is valid Enter a credit card number (enter a blank line to quit): 5555555555554444 Check digit should be: 4 Check digit is: 4 Number is valid Enter a credit card number (enter a blank line to quit): 5555555555554445 Check digit should be: 4 Check digit is: 5 Number is not valid Enter a credit card number (enter a blank line to quit): 5555555555554 ERROR! Number MUST have exactly 16 digits Enter a credit card number (enter a blank line to quit): Goodbye! NOTE: For this assignment you will need to use the Character.getNumericValue() method. This method takes a character value such as '2' and converts it to the appropriate integer value (in this case the number 2). char input='2'; int inputInt = Character.getNumericValue(input); // inputInt now has a value of 2 NOTE 2: For this assignment you need to test whether or not a String is empty (a blank line). There are a few different ways that you can perform this check. A good one is to use the isEmpty() method for Strings. One that will NOT be guaranteed to work in all situations is to use the following if condition: if (myString == "") { /* do something if the string is empty */ }

Submission Instructions

Make sure your programs compile and run correctly before submitting. To submit, follow the instructions from Closed Lab 01 to create a single zip file named Project06.zip that contains the file Project06.java and then upload that zip file to the Carmen dropbox for Project 06.

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!