Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Checks for a valid credit card number
- #include <cs50.h>
- #include <stdio.h>
- int get_length(long x);
- long first_two(long x);
- long first_digit(long x);
- int main(void)
- {
- long test = get_long("Number: ");
- long test2 = test;
- long digit = test/10;
- int len = get_length(test);
- int i = 0;
- int num;
- int luhn[10];
- while (digit != 0)
- {
- num = digit % 10;
- luhn[i] = 2*num;
- i++;
- digit /= 100;
- }
- int count = 9;
- int total = 0;
- int t, sum = 0, remainder;
- for (i = 0; i < 9; i++)
- {
- t = luhn[i];
- while (t != 0)
- {
- remainder = t % 10;
- sum = sum + remainder;
- t = t / 10;
- }
- }
- int num2;
- int remain[10];
- int i2 = 0;
- while (test != 0)
- {
- num2 = test % 10;
- remain[i2] = num2;
- i2++;
- test /= 100;
- }
- int count2 = 9;
- int total2 = 0;
- int t2, sum2 = 0, remainder2,i3 = 0;
- for (i3 = 0; i3 < 9; i3++)
- {
- t2 = remain[i3];
- while (t2 != 0)
- {
- remainder2 = t2 % 10;
- sum2 = sum2 + remainder2;
- t2 = t2 / 10;
- }
- }
- int total_sum = sum + sum2;
- int final_sum = total_sum % 10;
- long pair = first_two(test2);
- long single = first_digit(test2);
- if (final_sum ==0 && single == 4)
- {
- printf("VISA\n");
- }
- else if (final_sum == 0 && (pair == 34 || pair == 37))
- {
- printf("AMEX\n");
- }
- else if (final_sum == 0 && (pair > 50 && pair < 56))
- {
- printf("MASTERCARD\n");
- }
- else
- {
- printf("INVALID\n");
- }
- }
- int get_length(long x)
- {
- if (x >= 1000000000000000) return 16;
- if (x >= 100000000000000) return 15;
- if (x >= 10000000000000) return 14;
- if (x >= 1000000000000) return 13;
- if (x >= 100000000000) return 12;
- if (x >= 10000000000) return 11;
- if (x >= 1000000000) return 10;
- if (x >= 100000000) return 9;
- if (x >= 10000000) return 8;
- if (x >= 1000000) return 7;
- if (x >= 100000) return 6;
- if (x >= 10000) return 5;
- if (x >= 1000) return 4;
- if (x >= 100) return 3;
- if (x >= 10) return 2;
- return 1;
- }
- // Returns first pair of digits
- long first_two(long x)
- {
- long first;
- first = x;
- while (first >= 100)
- {
- first = first / 10;
- }
- return first;
- }
- // Returns first digit of input
- long first_digit(long x)
- {
- long first;
- first = x;
- while (first >= 10)
- {
- first = first / 10;
- }
- return first;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement