Skip to content

Instantly share code, notes, and snippets.

@raksalim
Last active April 25, 2020 17:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save raksalim/c38daab0a9e6b07718d67a78895a39c6 to your computer and use it in GitHub Desktop.
Save raksalim/c38daab0a9e6b07718d67a78895a39c6 to your computer and use it in GitHub Desktop.
Checks Credit Card Number's Validity using Luhn's Algorithm -- codeCademy Credit Card Checker Proj.
// All valid credit card numbers
const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8];
const valid2 = [5, 5, 3, 5, 7, 6, 6, 7, 6, 8, 7, 5, 1, 4, 3, 9];
const valid3 = [3, 7, 1, 6, 1, 2, 0, 1, 9, 9, 8, 5, 2, 3, 6];
const valid4 = [6, 0, 1, 1, 1, 4, 4, 3, 4, 0, 6, 8, 2, 9, 0, 5];
const valid5 = [4, 5, 3, 9, 4, 0, 4, 9, 6, 7, 8, 6, 9, 6, 6, 6];
// All invalid credit card numbers
const invalid1 = [4, 5, 3, 2, 7, 7, 8, 7, 7, 1, 0, 9, 1, 7, 9, 5];
const invalid2 = [5, 7, 9, 5, 5, 9, 3, 3, 9, 2, 1, 3, 4, 6, 4, 3];
const invalid3 = [3, 7, 5, 7, 9, 6, 0, 8, 4, 4, 5, 9, 9, 1, 4];
const invalid4 = [6, 0, 1, 1, 1, 2, 7, 9, 6, 1, 7, 7, 7, 9, 3, 5];
const invalid5 = [5, 3, 8, 2, 0, 1, 9, 7, 7, 2, 8, 8, 3, 8, 5, 4];
// Can be either valid or invalid
const mystery1 = [3, 4, 4, 8, 0, 1, 9, 6, 8, 3, 0, 5, 4, 1, 4];
const mystery2 = [5, 4, 6, 6, 1, 0, 0, 8, 6, 1, 6, 2, 0, 2, 3, 9];
const mystery3 = [6, 0, 1, 1, 3, 7, 7, 0, 2, 0, 9, 6, 2, 6, 5, 6, 2, 0, 3];
const mystery4 = [4, 9, 2, 9, 8, 7, 7, 1, 6, 9, 2, 1, 7, 0, 9, 3];
const mystery5 = [4, 9, 1, 3, 5, 4, 0, 4, 6, 3, 0, 7, 2, 5, 2, 3];
// An array of all the arrays above
const batch = [valid1, valid2, valid3, valid4, valid5, invalid1, invalid2, invalid3, invalid4, invalid5, mystery1, mystery2, mystery3, mystery4, mystery5];
/* ValidateCred(array) - Use Luhn algorithm to retrun boolian value for card validity. */
const validateCred = originalCardNum => {
// Start itterating from the left
let counter = 0;
let luhnCardNum = [];
let luhnCardSum = 0;
// Loop through to creat a new aray (luhnCardNum) with the given card number.
for (let i = (originalCardNum.length - 1) ; i >= 0; i -= 1) {
//Only double EVERY OTHER number from the left.
counter++;
if (counter % 2 == 0) {
//If doubled number is double digits, didgets of number is summed.
if (originalCardNum[i] * 2 > 9) {
luhnCardNum.unshift((originalCardNum[i] * 2) - 9);
} else {
luhnCardNum.unshift(originalCardNum[i] * 2);
};
} else {
luhnCardNum.unshift(originalCardNum[i]);
}
};
// Find sumation of luhnCardNum
for (let i = 0; i < luhnCardNum.length; i ++) {
luhnCardSum += luhnCardNum[i];
};
// retrun whether card is VALID or INVALID.
if (luhnCardSum % 10 == 0) {
return true
} else {
return false
}
};
/* FindInvalidCard(nestedArray) - Loops through nested array of card numbers to find card validity using validateCred() */
const findInvalidCard = allCards => {
// Keep Record of all valid and invalid cards
let allValidCards = [];
let allInvalidCards = [];
// Loops thorugh nested array to find all card's validity
for (i = 0; i < allCards.length; i ++) {
let cardValidity = validateCred(allCards[i]);
if (cardValidity == true) {
allValidCards += allCards[i];
console.log(`Card # ${i + 1} is VALID. \nCard Number: ${allCards[i].join("")}\n`);
// if card is invalid identify possible card companies using the first didget of card number.
} else {
allInvalidCards += allCards[i];
console.log(`Card # ${i + 1} is NOT VALID / INVALID. \nCard Number: ${allCards[i].join("")}`);
idInvalidCardCompanies(allCards[i][0]);
}
}
};
/* idInvalidCardCompanies(firstNum) - log to console possible issuer of invalid card number. */
const idInvalidCardCompanies = firstNum => {
//use switch function with default of "Company not found"
switch (firstNum) {
case 3:
console.log("The Issuer of the card was Amex (American Express).\n");
break;
case 4:
console.log("The Issuer of the card was Visa.\n");
break;
case 5:
console.log("The Issuer of the card was Master Card.\n");
break;
case 6:
console.log("The Issuer of the card was Discover.\n");
break;
default:
console.log("Company not found.\n")
break;
}
};
/* Your result will be at the very bottom. Please only run this on your own machine at your own risk. I just thought it was a fun ieda. Thank you */
const tryMyCard = cardNum => {
// making the card readable for the program
let cardNumArray = [[]];
for (let i = 0; i < cardNum.length; i ++) {
cardNumArray[0].push(parseInt(cardNum[i]));
}
console.log("")
console.log("The result for your card:")
//Your result will be at the very bottom
findInvalidCard(cardNumArray);
};
// call functions with nested arracy of cardnumbers
findInvalidCard(batch);
// Want to try a card number?
/* Your result will be at the very bottom. Please only run this on your own machine at your own risk.
I just thought it was a fun ieda. Thank you */
// Delete the slashes and enter a card number without spaces or symbols :)
// tryMyCard("");
@raksalim
Copy link
Author

You can try out any card number to see if it passes the validity test by un-commenting the block of code at the bottom and entering in a number. :) enjoy!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment