-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcredit.c
124 lines (103 loc) · 2.14 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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/***************************************************************************
* Assignment: Lab 3
*
* @file credit.c
* @brief Luhn's Algorithm
* @author Jennifer Quay Minnich
* @date Sept 24, 2020
*
*
* @details Using Luhn's Algorithm to test credit card validity from user's input.
* Converted a character array (string) to an integer.
*
* @bug none
*
* @todo none
**************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM_DIGITS 16
#define VALID 0
#define INVALID -1
#define SIZE 32
//function prototypes
void convert_card(int card[], char num[], int num_digits);
int calculate_algorithm(int card[], int size);
void print_card(int card[], int size, int answer);
int main(void)
{
int card[NUM_DIGITS];
/* use visa to store the credit card number from stdin */
char visa[SIZE + 1];
//user input
printf("Enter card number: ");
fgets(visa, SIZE, stdin);
sscanf(visa, "%d", &card);
//string to and int
convert_card(card, visa, NUM_DIGITS);
//algorithm
int answer;
answer = calculate_algorithm(card, NUM_DIGITS);
//prints card and confirms if valid
print_card(card, NUM_DIGITS, answer);
return 0;
}
void convert_card(int card[], char num[], int num_digits)
{
int i;
for(i = 0; i < num_digits; i++)
card[i] = num[i] - '0';
num = atoi(card);
}
int calculate_algorithm(int card[], int size)
{
int i = 0;
int presum[15];
int presum1[15];
int digit1 = 0;
int digit2 = 0;
int sum = 0;
int answer = 0;
for (i = 0; i < 16; i++){
if((i % 2)==0){
if((card[i] *2) < 10){
presum[i] = card[i] * 2;
}
else{
presum1[i] = card[i] * 2;
digit1 = presum1[i]/10;
digit2 = presum1[i] % 10;
presum[i] = digit1 + digit2;
}
}
else{
presum[i]=card[i];
}
sum = sum + presum[i];
}
digit2 = sum % 10;
if(digit2==0)
{
answer = 0;
}
else
{
answer = -1;
}
return answer;
}
void print_card(int card[], int size, int answer)
{
int i;
for (i = 0; i < size; i++)
printf("card[%d] = %d\n", i, card[i]);
if(answer==0)
{
printf("Card is Valid\n");
}
else
{
printf("Card is NOT Valid\n");
}
}