Last active
May 18, 2020 10:24
-
-
Save Chknbone/f5fe20f3838edc505e9df71308d5a6d2 to your computer and use it in GitHub Desktop.
Credit card number validator for Codecademy project.
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, | |
]; | |
// checks array for valid or invalid credit card numbers | |
let invalidCards = []; | |
function validateCred(cardNumArray) { | |
let validateNum = cardNumArray.slice(); //creating copy of array | |
// iterating through from right to left | |
for (let i = validateNum.length - 1; i >= 0; i--) { | |
//checking if index is even or odd. If index is even double the value | |
if (i % 2 === 0) { | |
validateNum[i] *= 2; | |
} | |
//checking if doubled value is greater than 9, if so, subtract 9 | |
if (validateNum[i] > 9) { | |
validateNum[i] -= 9; | |
} | |
} | |
//adding all values in array together | |
const getTotal = (x, y) => x + y; | |
let totalToBoolean = validateNum.reduce(getTotal); | |
//checking if the total is evenly divisable by 10. If so, set to true(valid card) otherwise false(invalid card) | |
if (totalToBoolean % 10 === 0) { | |
totalToBoolean = true; | |
} else { | |
totalToBoolean = false; | |
} | |
return totalToBoolean; | |
} | |
//adds invalid cards to an array | |
function findInvalidCards(cardNums) { | |
for (let i = 0; i < cardNums.length; i++) { | |
let checkCards = cardNums[i]; | |
if (!validateCred(checkCards)) { | |
invalidCards.push(checkCards); | |
} | |
} | |
return invalidCards; | |
} | |
//loads batch array of all card into function 'findInvalidCards()' | |
findInvalidCards(batch); | |
/* checks the array with the invalid card number to see what company they were issued by. | |
3 = Amex | |
4 = Visa | |
5 = MasterCard | |
6 = Discover | |
*/ | |
function invalidCardCompanies(fullNumber) { | |
const companyId = []; | |
fullNumber.forEach((getFirstNum) => { | |
switch (getFirstNum.shift()) { | |
case 3: | |
companyId.push("Amex"); | |
break; | |
case 4: | |
companyId.push("Visa"); | |
break; | |
case 5: | |
companyId.push("MasterCard"); | |
break; | |
case 6: | |
companyId.push("Discover"); | |
break; | |
default: | |
companyId.push("Company not found"); | |
break; | |
} | |
}); | |
return companyId; | |
} | |
console.log(invalidCardCompanies(invalidCards)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment