Skip to content

Instantly share code, notes, and snippets.

@GustavoM01
Created February 22, 2021 20:29
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 GustavoM01/52eea327e4c464c84fa2e1b2c077686e to your computer and use it in GitHub Desktop.
Save GustavoM01/52eea327e4c464c84fa2e1b2c077686e to your computer and use it in GitHub Desktop.
Project from Codecademy: functions to check if credit card numbers are valid or not and get the companies that have invalid cards.
// 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]
// Add your functions below:
/*(from) to copy array and avoid changing original,
(for) starting second to last and skipping one each round with -2 and multiplying,
(if) to check if over 9 and substract,
(reduce) to add all and (return) true or false if %10 = 0*/
const validateCred = (cardArray) => {
const validateCard = Array.from(cardArray);
for(let i = validateCard.length - 2; i >= 0; i = i - 2) {
validateCard[i] *= 2;
if(validateCard[i] > 9) {
validateCard[i] -= 9;
}
}
const addedValues = validateCard.reduce((accum, curr) => accum + curr);
return addedValues % 10 === 0;
}
//(let) to hold values, (filter) invalid cards by negating validateCred()
const findInvalidCards = (array) => {
let invalidCards = array.filter(elem => !validateCred(elem));
return invalidCards;
}
let arrayBadCards = findInvalidCards(batch);
/*(const) one for first digits of every array and second for the found companies,
(if) plus (include) to check if number exists in array and not doubling comp. names,
(if) plus (some) to check numbers out of known company digits*/
const idInvalidCardCompanies = (arrayInvalidCards) => {
const bankDigit = [];
const bankCompanies = [];
arrayInvalidCards.forEach(elem => bankDigit.push(elem[0]));
if(bankDigit.includes(3)) {
bankCompanies.push('Amex (American Express)');
}
if(bankDigit.includes(4)) {
bankCompanies.push('Visa');
}
if(bankDigit.includes(5)) {
bankCompanies.push('Mastercard');
}
if(bankDigit.includes(6)) {
bankCompanies.push('Discover')
}
if(bankDigit.some(x => x < 3 || x > 6)) {
bankCompanies.push('Company not found')
}
return bankCompanies;
}
console.log(idInvalidCardCompanies(arrayBadCards));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment