-
-
Save codecademydev/460c6171bdcf89e34715cd14d9b62caa to your computer and use it in GitHub Desktop.
Codecademy export
This file contains 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
// 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: | |
function validateCred(array) { | |
/*We'll place the handled numbers here upon iterating the provided array*/ | |
let iteratedArray = []; | |
/*Used to determine if iterated number needs doubling*/ | |
let counter = 1; | |
let digit = 0; | |
for (let i = array.length - 1; i >= 0; i--) { | |
/*Counter starts from 1, so last number in array doesn't get doubled*/ | |
if(counter % 2 === 0) { | |
/*Determining how to handle number after passing "every other digit" test.*/ | |
digit = array[i] * 2 > 9 ? (array[i] * 2) - 9 : array[i] * 2 | |
iteratedArray.unshift(digit); | |
} else { | |
iteratedArray.unshift(array[i]) | |
} | |
counter += 1; | |
} | |
//Summing the members of iteratedArray | |
let sum = iteratedArray.reduce((previousValue, currentValue) => { | |
return previousValue + currentValue; | |
}); | |
if (sum % 10 === 0){ | |
return true; | |
} else { | |
return false; | |
} | |
} | |
function findInvalidCards(array) { | |
let invalidCardArray = []; | |
for (card in array) { | |
if (validateCred(array[card]) === false){ | |
invalidCardArray.push(array[card]); | |
} | |
} | |
return invalidCardArray; | |
} | |
function idInvalidCardCompanies(array) { | |
let companyArray = []; | |
//Iterate through invalid cards array | |
for(card in array) { | |
let company; | |
/*First number of card determines company, so assigning company variable according to iterated card*/ | |
switch(array[card][0]) { | |
case 3: | |
company = 'Amex (American Express)'; | |
break; | |
case 4: | |
company = 'Visa'; | |
break; | |
case 5: | |
company = 'Mastercard'; | |
break; | |
case 6: | |
company = 'Discover'; | |
break; | |
default: | |
company = 'Company not found'; | |
} | |
//If company is not in companyArray, it gets pushed in | |
if (companyArray.indexOf(company) === -1) { | |
companyArray.push(company); | |
} | |
} | |
return companyArray; | |
} | |
let invalidCards = findInvalidCards(batch); | |
console.log(idInvalidCardCompanies(invalidCards)); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment