Advertisement
Guest User

Untitled

a guest
Sep 12th, 2021
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <cs50.h>
  3. #include <math.h>
  4.  
  5. //Function declaration
  6. int cardLuhn(long num);
  7. void cardClassify(int ret, long num);
  8.  
  9. int main(void)
  10. {
  11.     //Prompts the user for the card number
  12.     long num;
  13.     num = get_long("Number: ");
  14.  
  15.     if (num > pow(10, 16) || num < pow(10, 12))
  16.     {
  17.         printf("INVALID\n");
  18.     }
  19.     else
  20.     {
  21.         int ret = cardLuhn(num);
  22.         cardClassify(ret, num);
  23.     }
  24.     return 0;
  25. }
  26.  
  27. //Function for Luhn's Algorithm
  28. int cardLuhn(long num)
  29. {
  30.     long tempNum = num;
  31.  
  32.     //Algorithm for digits multiplied by 2
  33.     long dig, digSum = 0, loopSum = 0;
  34.     for (int i = 1; i < 9; i++)
  35.     {
  36.         dig = 2 * (tempNum % (long) pow(10, 2 * i) / (long) pow(10, 2 * i - 1));
  37.         int m, n = dig;
  38.         while (n > 0)
  39.         {
  40.             m = n % 10;
  41.             loopSum += m;
  42.             n = n / 10;
  43.         }
  44.         digSum = loopSum;
  45.     }
  46.  
  47.     //Algorithm for digits not multiplied by 2
  48.     for (int i = 1; i < 9; i++)
  49.     {
  50.         dig = tempNum % (long) pow(10, 2 * i - 1) / (long) pow(10, 2 * i - 2);
  51.         digSum += dig;
  52.     }
  53.  
  54.     if (digSum % 10 == 0)
  55.     {
  56.         return 0;
  57.     }
  58.     else
  59.     {
  60.         return 1;
  61.     }
  62. }
  63.  
  64. //Function for classifying the card
  65. void cardClassify(int ret, long num)
  66. {
  67.     if (ret != 0)
  68.     {
  69.         printf("INVALID\n");
  70.     }
  71.     //AMEX condition
  72.     else if (num % (long) pow(10, 15) / (long) pow(10, 13) == 37 || num % (long) pow(10, 15) / (long) pow(10, 13) == 34)
  73.     {
  74.         printf("AMEX\n");
  75.     }
  76.     //VISA or MASTERCARD condition
  77.     else if (num / (long) pow(10, 15) > 1)
  78.     {
  79.         if (num % (long) pow(10, 16) / (long) pow(10, 15) == 4)
  80.         {
  81.             printf("VISA\n");
  82.         }
  83.         else if (num % (long) pow(10, 16) / (long) pow(10, 14) > 50 && num % (long) pow(10, 16) / (long) pow(10, 14) < 56)
  84.         {
  85.             printf("MASTERCARD\n");
  86.         }
  87.         else
  88.         {
  89.             printf("INVALID\n");
  90.         }
  91.     }
  92.     else if (num % (long) pow(10, 13) / (long) pow(10, 12) == 4)
  93.     {
  94.         printf("VISA\n");
  95.     }
  96.     else
  97.     {
  98.         printf("INVALID\n");
  99.     }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement