Skip to content

Instantly share code, notes, and snippets.

@sstacey
Created June 2, 2021 15:09
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 sstacey/4c1426c400e83af533066af444c2ba37 to your computer and use it in GitHub Desktop.
Save sstacey/4c1426c400e83af533066af444c2ba37 to your computer and use it in GitHub Desktop.
// 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:
const validateCred = (card) => {
const checksum = [card.pop()]
card.reverse().forEach((digit, index) => {
if (index % 2 === 0) {
if (digit < 5) {
checksum.push(digit * 2)
} else {
checksum.push(digit * 2 - 9)
}
} else {
checksum.push(digit)
}
})
checksumTotal = checksum.reduce((acc, next) => acc += next)
if (checksumTotal % 10 === 0) {
return true
}
return false
}
const findInvalidCards = (cards) => {
invalidCards = []
cards.forEach(card => {
if (!validateCred(card)) {
invalidCards.push(card)
}
})
return invalidCards
}
const idInvalidCardCompanies = (invalidCards) => {
const invalidCompanies = new Set
invalidCards.forEach(card => {
switch (card[0]) {
case 3:
invalidCompanies.add('AMEX (American Expess)')
break;
case 4:
invalidCompanies.add('Visa')
break;
case 5:
invalidCompanies.add('Mastercard')
break;
case 6:
invalidCompanies.add('Discover')
break;
default:
invalidCompanies.add('Company not found')
break;
}
})
return Array.from(invalidCompanies)
}
console.log(validateCred(invalid1))
invalidCards = findInvalidCards(batch)
console.log(invalidCards.length)
console.log(idInvalidCardCompanies(invalidCards))
@sstacey
Copy link
Author

sstacey commented Jun 2, 2021

Solution to Codeacademy project.

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