Created
July 8, 2021 13:18
-
-
Save github524/b1b6d670133babb96d5b664514f75557 to your computer and use it in GitHub Desktop.
Codecademy Project: The Luhn algorithm is a series of mathematical calculations used to validate certain identification numbers, e.g. credit card numbers. The calculations in the Luhn algorithm can be broken down as the following steps: Starting from the farthest digit to the right, AKA the check digit, iterate to the left. As you iterate to the…
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: | |
const validateCred = arr => { | |
let endEl = 0; | |
let multiEl = 0; | |
let normEl = 0; | |
let sum = 0; | |
let sliceArr = arr.slice() | |
let revArr = sliceArr.reverse(); | |
sum = revArr.forEach((value, index) => { | |
if(index == 0){ | |
endEl = value | |
} else if( index % 2 == 0) { | |
normEl += value; | |
} else if(value * 2 > 9) { | |
multiEl += (value * 2 -9); | |
} else { | |
multiEl += value * 2; | |
} | |
}) | |
sum = normEl + multiEl + endEl | |
//return sum | |
//console.log("Sum is: "+ sum) | |
if(sum % 10 === 0) { | |
return true; | |
} else { | |
return false | |
}; | |
} | |
const testThem = (array, func) => { | |
array.forEach(item => { | |
//func(item); | |
console.log(func(item)) | |
return func(item) | |
}) | |
}; | |
//console.log(testThem(batch,validateCred)) | |
//console.log(validateCred(valid1)); | |
const invalidCards = [] | |
const findInvalidCards = arr => { | |
//let invalidCards = []; | |
let result; | |
arr.forEach(array => { | |
result = validateCred(array); | |
if( result === false) { | |
invalidCards.push(array); | |
} | |
}) | |
//console.log(invalidCards); | |
return invalidCards | |
} | |
findInvalidCards(batch); | |
//console.log(invalidCards) | |
const idInvalidCardCompanies = arr => { | |
const companies = []; | |
let firstNum; | |
let companyName; | |
//use switch here... | |
arr.forEach(array => { | |
firstNum = array[0]; | |
switch (firstNum) { | |
case 3: | |
companyName = "Amex (American express)"; | |
break; | |
case 4: | |
companyName = "Visa"; | |
break; | |
case 5: | |
companyName = "Mastercard"; | |
break; | |
case 6: | |
companyName = "Discover"; | |
break; | |
default: | |
console.log('Company Not Found'); | |
} | |
if(companies.includes(companyName) === false){ | |
companies.push(companyName); | |
} | |
}) | |
console.log(companies) | |
} | |
idInvalidCardCompanies(invalidCards) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment