-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcredit.c
107 lines (95 loc) · 3.01 KB
/
credit.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <stdio.h>
#include <cs50.h>
int main(void)
{
long card;
do
{
card = get_long("Card nº: ");
}
while (card < 0); //card number must be greater than 0
int card1, card2, card3, card4, card5, card6, card7, card8;
card1 = ((card % 100) / 10) * 2;
card2 = ((card % 10000) / 1000) * 2;
card3 = ((card % 1000000) / 100000) * 2;
card4 = ((card % 100000000) / 10000000) * 2;
card5 = ((card % 10000000000) / 1000000000) * 2;
card6 = ((card % 1000000000000) / 100000000000) * 2;
card7 = ((card % 100000000000000) / 10000000000000) * 2;
card8 = ((card % 10000000000000000) / 1000000000000000) * 2;
card1 = (card1 % 100 / 10) + (card1 % 10);
card2 = (card2 % 100 / 10) + (card2 % 10);
card3 = (card3 % 100 / 10) + (card3 % 10);
card4 = (card4 % 100 / 10) + (card4 % 10);
card5 = (card5 % 100 / 10) + (card5 % 10);
card6 = (card6 % 100 / 10) + (card6 % 10);
card7 = (card7 % 100 / 10) + (card7 % 10);
card8 = (card8 % 100 / 10) + (card8 % 10);
//sum up the first part of algorithm...
int sum1 = card1 + card2 + card3 + card4 + card5 + card6 + card7 + card8;
//find the numbers that were not multiplied by 2...
int card9, card10, card11, card12, card13, card14, card15, card16;
card9 = (card % 10);
card10 = ((card % 1000) / 100);
card11 = ((card % 100000) / 10000);
card12 = ((card % 10000000) / 1000000);
card13 = ((card % 1000000000) / 100000000);
card14 = ((card % 100000000000) / 10000000000);
card15 = ((card % 10000000000000) / 1000000000000);
card16 = ((card % 1000000000000000) / 100000000000000);
//sum up the second part...
int sum2 = card9 + card10 + card11 + card12 + card13 + card14 + card15 + card16;
//sum up them all together...
int sum3 = sum1 + sum2;
//now if the last digit in the sum3 is zero the card is VALID otherwise its INVALID...
int length = 0;
long visa = card;
long amex = card;
long master = card;
if ((sum3 % 10) != 0)
{
printf("%s\n", "INVALID");
return 0; //'return 0' for the program stop here.
}
//now we need to differentiate between VISA, MASTER and AMEX...
while (card > 0)
{
card = card / 10;
length++;
}
//if the card is a VISA...
while (visa >= 10)
{
visa /= 10;
}
if (visa == 4 && (length == 13 || length == 16))
{
printf("%s\n", "VISA");
return 0;
}
//indentify if card is an AMEX...
while (amex >= 10000000000000)
{
amex /= 10000000000000;
}
if (length == 15 && (amex == 34 || amex == 37))
{
printf("%s\n", "AMEX");
return 0;
}
//now if is a MASTERCARD...
while (master >= 100000000000000)
{
master /= 100000000000000;
}
if (length == 16 && (master == 51 || master == 52 || master == 53 || master == 54 || master == 55))
{
printf("%s\n", "MASTERCARD");
return 0;
}
else
{
printf("%s\n", "INVALID");
return 0;
}
}