-
-
Save codecademydev/5d158f2a177151d7a947471169383d2a 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
// Code by @IsraelBeni | |
// 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: | |
// validate() checks if a credit card is valide or not. It return true if it does and false if it does not. | |
const validate = creditCardNumber => { | |
let sum = 0; | |
let parity = creditCardNumber.length % 2; | |
console.log(creditCardNumber.length); | |
for (let counter = creditCardNumber.length - 1; counter >= 0; counter--) { | |
if (parity === 0) { | |
if ((counter % 2) !== 0) { | |
sum += creditCardNumber[counter]; | |
} else { | |
let doubledNumber = creditCardNumber[counter] * 2; | |
if (doubledNumber > 9) { | |
doubledNumber -= 9; | |
} | |
sum += doubledNumber; | |
} | |
} else { | |
if ((counter % 2) === 0) { | |
sum += creditCardNumber[counter]; | |
} else { | |
let doubledNumber = creditCardNumber[counter] * 2; | |
if (doubledNumber > 9) { | |
doubledNumber -= 9; | |
} | |
sum += doubledNumber; | |
} | |
} | |
console.log('sum: ', sum); | |
} | |
return ((sum % 10) === 0) ? [true, sum] : [false, sum]; | |
} | |
// findInvalidCards() function filter a nested credit cards array and return an array of invalide credit cards | |
const findInvalidCards = creditCardsArray => { | |
const invalidCards = creditCardsArray.filter(creditCard => { | |
const validateFunctionReturnValue = validate(creditCard); | |
return validateFunctionReturnValue[0] === false; | |
}); | |
console.log(invalidCards); | |
return invalidCards; | |
} | |
// idInvalidCardCompanies() return the an array of the id of companies that mailed out invalid credit cards based on a provided array of credit cards | |
const idInvalidCardCompanies = creditCardArray => { | |
const invalidCardCompanies = []; | |
let companyName = ''; | |
creditCardArray.forEach(element => { | |
//console.log('Element first: ', element[0]); | |
//console.log('Type of element: ', typeof element); | |
if (element[0] === 3) { | |
//console.log(3); | |
companyName = 'Amex (American Express)'; | |
} else if (element[0] === 4) { | |
//console.log(4); | |
companyName = 'Visa'; | |
} else if (element[0] === 5) { | |
//console.log(5); | |
companyName = 'Mastercard'; | |
} else if (element[0] === 6) { | |
//console.log(6); | |
//companyName = 'Discover'; | |
} | |
if (!invalidCardCompanies.includes(companyName)) { | |
invalidCardCompanies.push(companyName); | |
console.log(invalidCardCompanies); | |
} | |
}); | |
return invalidCardCompanies; | |
} | |
// splitOneCardNumber() function take a single string and it converts into an array single digit number | |
const splitOneCardNumber = string => { | |
splittedString = string.split(''); | |
return splittedString.map( char => Number.parseInt(char, 10)); | |
} | |
// splitManyCardNumber() function take an array of strings and it converts into an nested array single digit numbers | |
const splitManyCardNumbers = stringsArray => { | |
const splittedStrings = []; | |
for (let string of stringsArray) { | |
splittedStrings.push(splitOneCardNumber(string)); | |
} | |
return splittedStrings; | |
} | |
// invalidToValidCardConverter() function converts an invalid card number to a valid one by adding the a check digit at its end | |
const invalidToValidCardConverter = cardNumberArray => { | |
const validateFunctionReturnValue = validate(cardNumberArray); | |
if (validateFunctionReturnValue[0] === false) { | |
cardNumberArray.push((10 - (validateFunctionReturnValue[1] % 10))) | |
} | |
console.log(cardNumberArray); | |
return cardNumberArray; | |
// checkDigit calculates the value that the last digit of the card number should take | |
} | |
/* --------- This part below is to test the above functionalities ----------*/ | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment