master
..
rw-r--r--
4.4 KB
rw-r--r--
2.1 KB
rw-r--r--
3.2 KB

Learning Profile for Assignment #2, And Question #3

Name: Mo Khan Student ID: 3431709

  1. Problem Statement:

Credit card numbers follow certain patterns. A credit card number must have between 13 and 16 digits. It must start with 4 for Visa cards, 5 for Master cards, 37 for American Express cards, and 6 for Discover cards. In 1954, Hans Luhn of IBM proposed the following algorithm for validating credit card numbers:

1. Double every second digit from right to left (e.g., if number is 3 => 3 * 2 => 6) and add them together.
1. If this doubling results in a two-digit number, then add the two digits to get a single-digit number (e.g., if number is 5 => 5 * 2 => 10 => 1+0 => 1).

So, for the credit card number 4388576018402626, doubling all second digits from the right results in

(2 * 2 = 4) + (2 * 2 = 4) + (4 * 2 = 8) + (1 * 2 = 2) + (6 * 2 = 12 = 1 + 2 = 3) + (5 * 2 = 10 = 1 + 0 = 1) + (8 * 2 = 16 = 1 + 6 = 7) + (4 * 2 = 8).

This totals to 4 + 4 + 8 + 2 + 3 + 1 + 7 + 8 = 37.

Add all digits in the odd places from right to left. The leftmost digit of the credit card number is at index 0;

6 + 6 + 0 + 8 + 0 + 7 + 8 + 3 = 38.

Add results from steps (a) and (b) and see if divisible by 10. If it is, then the card number is valid; otherwise invalid.

37 + 38 = 75 is not divisible by 10, so it is an invalid credit card number.

Implement Luhn’s algorithm in a program to determine whether a given credit card number is valid or not. You must test if the number of digits in the input is in the valid range (13 to 16), run Luhn’s algorithm to test its validity, and if it is valid, print the name of the company that offers that credit card number.

  1. Description of the Code:

The code implements the expected API as per the class diagram provided in the assignment. I also included some additional private methods to try to increase the readability of the code. The bulk of the logic for the Luhn algorithm takes place in the calculateSums method.

This method reverses the credit card number then loops through each character. As it loops through each character it checks to see if the current index is even or odd and applys the appropriate summing rules for that index.

  1. Errors and Warnings:

  2. Length is too short:

```bash
java -cp target/assignment2*.jar ca.mokhan.comp268.App 3
Enter credit card #:
1334
1334 in invalid
```
  1. Length is too long:
```bash
Enter credit card #:
41111111111111111
41111111111111111 in invalid
````
  1. Invalid card type:
```bash
Enter credit card #:
1234567890123456
1234567890123456 in invalid
```
  1. Sample Input and Output

  2. Valid AMEX card #:

```bash
Enter credit card #:
378282246310005
378282246310005 is offerred by American Express
```
  1. Valid Discover card #:
```bash
Enter credit card #:
6011111111111117
6011111111111117 is offerred by Discover
```
  1. Valid MasterCard #:
```bash
Enter credit card #:
5555555555554444
5555555555554444 is offerred by MasterCard
```
  1. Valid Visa card #:
```bash
Enter credit card #:
4012888888881881
4012888888881881 is offerred by Visa
```
  1. Discussion: