Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // This program will check if the credit or debit card is valid using the Luhn's algorithm. It can check the American Express, Master Card and VISA cards
- #include <stdio.h>
- #include <cs50.h>
- // Functions needed to calculate part of the Luhn's algorithm
- int odd(long number);
- int even(long number);
- int main(void)
- {
- // Declaration of variable "number" (for input from user) and card to check the card type
- long number = 0;
- int card = 0;
- // Loop to get valid input from the user
- do
- {
- // Data type "long" so there will be enough memory for a valid card number
- number = get_long("Number: ");
- // Checking the card type and storing it to variable "card", if wrong type, invalid number or string, prompting the number again
- // 0 = INVALID
- // 1 and 2 = AMEX (15 digits)
- // 3 = MASTERCARD (16 digits)
- // 4 and 5 = VISA (13 and 16 digits)
- if (number > 339999999999999.9 && number < 349999999999999.9)
- {
- // AMEX 1
- card = 1;
- }
- else if (number > 369999999999999.9 && number < 379999999999999.9)
- {
- // AMEX 2
- card = 2;
- }
- else if (number > 5099999999999999.9 && number < 5599999999999999.9)
- {
- // MASTERCARD
- card = 3;
- }
- else if (number > 3999999999999.9 && number < 4999999999999.9)
- {
- // VISA 1
- card = 4;
- }
- else if (number > 3999999999999999.9 && number < 4999999999999999.9)
- {
- // VISA 2
- card = 5;
- }
- else
- {
- // INVALID
- printf("INVALID\n");
- exit(0);
- }
- }
- while (card != 1 && card != 2 && card != 3 && card != 4 && card != 5);
- // Checking validity of the card
- int a = even(number);
- int b = odd(number);
- int check = ((a + b) % 10);
- if (check == 0)
- {
- if (card == 1 || card == 2)
- {
- printf("AMEX\n");
- }
- else if (card == 3)
- {
- printf("MASTERCARD\n");
- }
- else if (card == 4 || card == 5)
- {
- printf("VISA\n");
- }
- }
- else
- {
- printf("INVALID\n");
- }
- }
- // Function for calculating the odd numbers total
- int odd(long number)
- {
- int n1 = 0;
- int n2 = 0;
- for (long i = 0, j = 1000, k = 100; i < 7; i++)
- {
- n1 = ((number % j) / k);
- n2 = n2 + n1;
- j = j * 100;
- k = k * 100;
- }
- int n0 = (number % 10);
- int odd = n2 + n0;
- return odd;
- }
- // Function for calculating the even numbers total
- int even(long number)
- {
- int n1 = 0;
- int even = 0;
- for (long i = 0, j = 100, k = 10; i < 8; i++)
- {
- n1 = (((number % j) / k) * 2);
- if (n1 > 9)
- {
- n1 = (n1 - 9);
- }
- even = (even + n1);
- j = j * 100;
- k = k * 100;
- }
- return even;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement