Skip to content

Instantly share code, notes, and snippets.

@codecademydev
Created February 10, 2021 12:20
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 codecademydev/5d158f2a177151d7a947471169383d2a to your computer and use it in GitHub Desktop.
Save codecademydev/5d158f2a177151d7a947471169383d2a to your computer and use it in GitHub Desktop.
Codecademy export
// 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