-
-
Save codecademydev/48c0dcf49d3e93e15757c8d417f46ade 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: | |
// Putting the Luhn Algorithm into code | |
const validateCred = array => { | |
let firstSum = 0; | |
let skipped = 0; | |
//Iterate backwards | |
for (let i = array.length - 2; i >= 0; i-=2) { | |
//console.log(array[i]); | |
//Double every other digit in the card number | |
let doubled = array[i] * 2; | |
// If the doubled number is greater than 9, subtract 9 | |
if (doubled > 9) { | |
doubled -= 9; | |
} | |
//Total up all doubled numbers and save under firstSum | |
firstSum += doubled; | |
//console.log(firstSum); | |
} | |
//Iterate again to catch all unused numbers | |
for (let j = array.length - 1; j >= 0; j-=2){ | |
//console.log(array[j]); | |
//Add all unused numbers to variable 'skipped' | |
skipped += array[j]; | |
} | |
//console.log(skipped); | |
//Sum up all doubled numbers and skipped numbers | |
let finalSum = firstSum + skipped; | |
//console.log(finalSum); | |
//If the final sum % 10 equals 0, the card number is valid | |
if (finalSum % 10 === 0) { | |
return true; | |
} else { | |
return false; | |
} | |
} | |
//console.log(validateCred(valid1)); | |
/*let knownInvalid = [invalid1, invalid2, invalid3, invalid4, invalid5];*/ | |
//Set up empty array to hold invalid card numbers | |
let invalidCards = []; | |
const findInvalidCards = nestArray => { | |
//Iterate through the nested array | |
for (let i = 0; i < nestArray.length; i++) { | |
//Run validateCred on each array in the array | |
validateCred(nestArray[i]); | |
//If the card number is invalid, add it to the invalidCards array | |
if (validateCred(nestArray[i]) === false) { | |
invalidCards.push(nestArray[i]); | |
} | |
} | |
//Check the invalidCards array | |
console.log(invalidCards); | |
} | |
findInvalidCards(batch); | |
//This function only works if you run the findInvalidCards function first and DON'T COMMENT IT OUT before you run idInvalidCardCompanies!!! | |
const idInvalidCardCompanies = invalidArray => { | |
//Create new array containint all invalid cards | |
let badCards = invalidCards; | |
// Create array of companies to contact | |
let contactCompanies = []; | |
//Iterate through new array | |
for (let i = 0; i < badCards.length; i++) { | |
//Amex (American Express) cards start with 3 | |
if (badCards[i][0] === 3) { | |
//Check if Amex is in contactCompanies array | |
if (contactCompanies.indexOf('Amex') === -1) { | |
//If not, add Amex to the list | |
contactCompanies.push('Amex'); | |
} | |
//Visa cards start with 4 | |
} else if (badCards[i][0] === 4) { | |
//Check if Visa is in contactCompanies list | |
if (contactCompanies.indexOf('Visa') === -1) { | |
//If not, add to list | |
contactCompanies.push('Visa'); | |
} | |
//Mastercards start with 5 | |
} else if (badCards[i][0] === 5) { | |
//Check if Mastercard is on contact list | |
if (contactCompanies.indexOf('Mastercard') === -1) { | |
//If not, add to list | |
contactCompanies.push('Mastercard'); | |
} | |
//Discover cards start with 6 | |
} else if (badCards[i][0] === 6) { | |
//Check if Discover is on contact list | |
if (contactCompanies.indexOf('Discover') === -1) { | |
//If not, add to list | |
contactCompanies.push('Discover'); | |
} | |
} else { | |
//If the first number is not on this list, log to screen "Company not found" | |
console.log("Company not found"); | |
} | |
} | |
//Log to screen entire contactCompanies list | |
console.log(contactCompanies); | |
} | |
idInvalidCardCompanies(invalidCards); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment