Created
March 30, 2024 17:24
-
-
Save tchiinhemba/2946371972abf3dd17b9d7d2f89576a0 to your computer and use it in GitHub Desktop.
This code is an implementation of the Luhn Algorithm
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cs50.h> | |
#include <stdio.h> | |
#include <string.h> | |
#include <stdlib.h> | |
#include <ctype.h> | |
int luhnValidation(char *cardNumber); | |
int toNumber(char text); | |
char *toString(int number); | |
void checkValidation(char *number, char *cardNumber); | |
int main(void) | |
{ | |
int validationResult = 0; | |
string cardNumberAsText = get_string("Number: "); | |
for (int i = 0; i < strlen(cardNumberAsText); i++) | |
{ | |
if (isdigit(cardNumberAsText[i]) == false) | |
{ | |
cardNumberAsText = get_string("Number: "); | |
} | |
} | |
validationResult = luhnValidation(cardNumberAsText); | |
checkValidation(toString(validationResult), cardNumberAsText); | |
} | |
// Luhn Validation | |
int luhnValidation(char *cardNumber) | |
{ | |
int finalSum = 0; | |
int individualNumber = 0; | |
for (int i = 0; i < strlen(cardNumber); i++) | |
{ | |
individualNumber = toNumber(cardNumber[i]); | |
individualNumber *= 2; | |
if (individualNumber > 9) | |
{ | |
individualNumber -= 9; | |
} | |
finalSum += individualNumber; | |
i++; | |
} | |
for (int i = 0; i < strlen(cardNumber); i++) | |
{ | |
i++; | |
finalSum += toNumber(cardNumber[i]); | |
} | |
return finalSum; | |
} | |
void checkValidation(char *number, char *cardNumber) | |
{ | |
int bufferItem = strlen(number) - 1; | |
int firstDigit = toNumber(cardNumber[0]); | |
if (toNumber(number[bufferItem]) == 0) | |
{ | |
switch (firstDigit) | |
{ | |
case 3: | |
printf("AMEX\n"); | |
break; | |
case 4: | |
printf("VISA\n"); | |
break; | |
case 5: | |
printf("MASTERCARD\n"); | |
break; | |
} | |
} | |
else | |
{ | |
printf("INVALID\n"); | |
} | |
} | |
// convert to number | |
int toNumber(char text) | |
{ | |
return text - '0'; | |
} | |
// convert to string | |
char *toString(int number) | |
{ | |
char *result = (char *)malloc(20 * sizeof(char)); | |
sprintf(result, "%d", number); | |
return result; | |
} | |
void checkBrand(char *number) | |
{ | |
for (int i = 0; i < strlen(number); i++) | |
{ | |
if (number) | |
{ | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment