Advertisement
OlegGonchar

Credit

Dec 17th, 2017
514
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.79 KB | None | 0 0
  1. #include <cs50.h>
  2. #include <stdbool.h>
  3. #include <stdio.h>
  4.  
  5. int main(void)
  6. {
  7.     long long   card_number, orig_number;
  8.     string      card_type;
  9.     int         digits = 0, temp = 0, current = 0,
  10.                 even_digits = 0, odd_digits = 0, total_sum = 0;
  11.     bool        is_even = false;
  12.  
  13. // Get Card number
  14.  
  15.     do
  16.     {
  17.         printf("Number: ");
  18.         card_number = get_long_long();
  19.     }
  20.     while (card_number < 0);
  21.  
  22. // Save card number for later check;
  23.  
  24.     orig_number = card_number;
  25.  
  26. // Process Card Number
  27.  
  28.     while (card_number != 0)
  29.     {
  30.  
  31. // Get last digit of number
  32.  
  33.         current = (card_number % 10);
  34.  
  35. // Increase number of digits in card number
  36.  
  37.         digits += 1;
  38.  
  39. // Check if digit is even or odd and increase appropriate sum
  40.  
  41.         if (is_even == true)
  42.         {
  43.  
  44. // Multiply digit by 2
  45.  
  46.             temp = current * 2;
  47.  
  48. // Add each digit of product
  49.  
  50.             while (temp != 0)
  51.             {
  52.                 even_digits += temp % 10;
  53.                 temp /= 10;
  54.             }
  55.  
  56. // Tell program next digit is odd
  57.  
  58.             is_even = false;
  59.         }
  60.         else
  61.         {
  62.             odd_digits += current;
  63.  
  64. // Tell program next digit is even
  65.  
  66.             is_even = true;
  67.         }
  68.  
  69. // Remove last digit and continue
  70.  
  71.         card_number /= 10;
  72.     }
  73.  
  74. // Get total sum
  75.  
  76.     total_sum = even_digits + odd_digits;
  77.  
  78. // Check sum and card type by first digit
  79.  
  80.     if (total_sum % 10 == 0)
  81.     {
  82.  
  83. // Check AMEX
  84.  
  85.         if (digits == 15)
  86.         {
  87.             if ((orig_number / (long long) 10E12) == 34 ||
  88.                 (orig_number / (long long) 10E12) == 37)
  89.             {
  90.                 card_type = "AMEX";
  91.             }
  92.             else
  93.             {
  94.                 card_type = "INVALID";
  95.             }
  96.         }
  97.         else if (digits == 16)
  98.         {
  99.  
  100. // Check Mastercard
  101.  
  102.             if ((orig_number / (long long) 10E13) >= 51 &&
  103.                 (orig_number / (long long) 10E13) <= 55)
  104.             {
  105.                 card_type = "MASTERCARD";
  106.             }
  107.  
  108. // Check some Visas
  109.  
  110.             else if ((orig_number / (long long) 10E14) == 4)
  111.             {
  112.                 card_type = "VISA";
  113.             }
  114.             else
  115.             {
  116.                 card_type = "INVALID";
  117.             }
  118.         }
  119.  
  120. // Check Visa
  121.  
  122.         else if (digits == 13)
  123.         {
  124.             if ((orig_number / (long long) 10E11) == 4)
  125.             {
  126.                 card_type = "VISA";
  127.             }
  128.             else
  129.             {
  130.                 card_type = "INVALID";
  131.             }
  132.         }
  133.         else
  134.         {
  135.             card_type = "INVALID";
  136.         }
  137.     }
  138.     else
  139.     {
  140.         card_type = "INVALID";
  141.     }
  142.  
  143. // Print result
  144.  
  145.     printf("%s\n", card_type);
  146.  
  147.     return 0;
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement