Advertisement
Guest User

Untitled

a guest
Aug 18th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.74 KB | None | 0 0
  1. // Checks for a valid credit card number
  2.  
  3. #include <cs50.h>
  4. #include <stdio.h>
  5.  
  6. int get_length(long x);
  7. long first_two(long x);
  8. long first_digit(long x);
  9.  
  10. int main(void)
  11. {    
  12.    
  13.     long test = get_long("Number: ");
  14.     long test2 = test;
  15.     long digit = test/10;
  16.    
  17.     int len = get_length(test);
  18.        
  19.     int i = 0;
  20.     int num;
  21.     int luhn[10];
  22.     while (digit != 0)
  23.     {
  24.         num = digit % 10;
  25.         luhn[i] = 2*num;
  26.         i++;
  27.         digit /= 100;
  28.     }
  29.     int count = 9;
  30.     int total = 0;
  31.     int t, sum = 0, remainder;
  32.     for (i = 0; i < 9; i++)
  33.     {
  34.         t = luhn[i];
  35.         while (t != 0)
  36.         {
  37.             remainder = t % 10;
  38.             sum  = sum + remainder;
  39.             t = t / 10;
  40.         }
  41.     }
  42.        
  43.     int num2;
  44.     int remain[10];
  45.     int i2 = 0;
  46.     while (test != 0)
  47.     {
  48.         num2 = test % 10;
  49.         remain[i2] = num2;
  50.         i2++;
  51.         test /= 100;
  52.     }
  53.     int count2 = 9;
  54.     int total2 = 0;
  55.     int t2, sum2 = 0, remainder2,i3 = 0;
  56.     for (i3 = 0; i3 < 9; i3++)
  57.     {
  58.         t2 = remain[i3];
  59.         while (t2 != 0)
  60.             {
  61.                 remainder2 = t2 % 10;
  62.                 sum2  = sum2 + remainder2;
  63.                 t2 = t2 / 10;
  64.             }
  65.     }  
  66.          
  67.     int total_sum = sum + sum2;
  68.     int final_sum = total_sum % 10;
  69.     long pair = first_two(test2);
  70.     long single = first_digit(test2);
  71.    
  72.     if (final_sum ==0 && single == 4)
  73.     {
  74.         printf("VISA\n");
  75.     }
  76.     else if (final_sum == 0 && (pair == 34 || pair == 37))
  77.     {
  78.         printf("AMEX\n");
  79.     }
  80.     else if (final_sum == 0 && (pair > 50 && pair < 56))
  81.     {
  82.         printf("MASTERCARD\n");
  83.     }
  84.     else
  85.     {
  86.         printf("INVALID\n");
  87.     }
  88. }
  89.  
  90.  
  91. int get_length(long x)
  92. {
  93.     if (x >= 1000000000000000) return 16;
  94.     if (x >= 100000000000000) return 15;
  95.     if (x >= 10000000000000) return 14;
  96.     if (x >= 1000000000000) return 13;
  97.     if (x >= 100000000000) return 12;
  98.     if (x >= 10000000000) return 11;
  99.     if (x >= 1000000000) return 10;
  100.     if (x >= 100000000)  return 9;
  101.     if (x >= 10000000)   return 8;
  102.     if (x >= 1000000)    return 7;
  103.     if (x >= 100000)     return 6;
  104.     if (x >= 10000)      return 5;
  105.     if (x >= 1000)       return 4;
  106.     if (x >= 100)        return 3;
  107.     if (x >= 10)         return 2;
  108.     return 1;
  109. }
  110.  
  111. // Returns first pair of digits
  112. long first_two(long x)
  113. {
  114.     long first;
  115.     first = x;
  116.  
  117.     while (first >= 100)
  118.     {
  119.         first = first / 10;
  120.     }
  121.     return first;
  122. }
  123.  
  124. // Returns first digit of input
  125. long first_digit(long x)
  126. {
  127.     long first;
  128.     first = x;
  129.    
  130.     while (first >= 10)
  131.     {
  132.         first = first / 10;
  133.     }
  134.     return first;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement