Luhn's Test of Credit Card Numbers (Due 05 Jul 2015)

In this program you will test whether a given 15 or 16-digit credit card number is valid or not. Here are the steps in your program:

You will be making the following assumptions: Here are possible scenarios that may happen. Your output statements must be exactly the ones specified. Points will be deducted for variations.

Scenario 1
Enter 15 or 16-digit credit card number: 123456789876

Not a 15 or 16-digit number
Scenario 2
Enter 15 or 16-digit credit card number: 12345678123456780

Not a 15 or 16-digit number
Scenario 3
Enter 15 or 16-digit credit card number: 1234567891234567

Invalid credit card number
Scenario 4
Enter 15 or 16-digit credit card number: 4222222222222220

Valid Visa credit card number

Luhn's Test: Let us say that the credit card number was made of the following digits:

d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0

The last digit d0 is the check digit in the Luhn's algorithm. The algorithm goes as follows:

Here are two examples worked out - one is a valid credit card number and the other is an invalid credit card number.

Valid Credit Number
d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
4 4 3 2 3 3 3 8 8 4 1 3 8 3 4 3
8   6   6   6   16   2   16   8  
8   6   6   6   7   2   7   8  
8 4 6 2 6 3 6 8 7 4 2 3 7 3 8 3

The sum of the digits is 80. It is divisible by 10 and hence the credit card number is valid.

Invalid Credit Number
d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
8 2 7 3 1 2 3 2 7 3 5 1 0 5 6 9
16   14   2   6   14   10   0   12  
7   5   2   6   5   1   0   3  
7 2 5 3 2 2 6 2 5 3 1 1 0 5 3 9

The sum of the digits is 56. It is not divisible by 10 and hence the credit card number is invalid.

To obtain the last digit of a number use the modulo (%) operator. To remove the last digit of a number divide by 10. Here is a piece of code that shows how to obtain the last two digits of the credit card number.

  long creditCard = sc.nextLong();
  
  int d0 = (int) (creditCard % 10);

  creditCard = creditCard / 10;

  int d1 = (int) (creditCard % 10);

The first digit of a credit card is known as the Major Industry Identifier (MII).

The first six digits of a credit card (including the initial MII digit) are known as the issuer identification number (IIN). You are responsible for identifying only the following cards that start with the given digits: If the starting digits are not the ones given, then you do not have to identify the card. The method that you will be writing will return a blank string if you cannot identify the card.

The class that you will be writing will be called CreditCard. You must use methods in your class. You can write more methods than we have asked for. At a minimum it should have the following structure:

import java.util.*;

public class CreditCard
{
  // This method checks if a credit card number is valid
  public static boolean is_valid (long cc_num) {  }

  // This method returns the type of credit card
  public static String cc_type (long cc_num) {  }

  public static void main (String[] args) {  }
}

We will be looking at good documentation, and adherence to the coding convention mentioned below. Your file CreditCard.java will have the following header:

/*
  File: CreditCard.java

  Description:

  Student Name:

  Student UT EID:

  Course Name: CS 312

  Unique Number: 

  Date Created:

  Date Last Modified:

*/

There is a modification that I would like to make to the standard coding conventions. Please align the opening and closing braces vertically so that you can easily make out the blocks of code. For example:

Do this:
if ( x > 5 )
{
  a = b + c;
}

Not this:
if ( x > 5 ) {
  a = b + c;
}

Use the Canvas program to submit your CreditCard.java file. We should receive your work by 11 PM on Sunday, 05 Jul 2015. There will be substantial penalties if you do not adhere to the guidelines.