Skip to content

Instantly share code, notes, and snippets.

@peeczi
Created January 29, 2022 21:34
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 peeczi/fa09017d1465c084b833aec73d3d4710 to your computer and use it in GitHub Desktop.
Save peeczi/fa09017d1465c084b833aec73d3d4710 to your computer and use it in GitHub Desktop.
codecademy project
// 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:
// function that validates a credit card number
const validateCred = (array) => {
// boolean to determine whether to double current element when iterating through array
let double = true;
// value of each element
let value;
// total of added values
let payloadTotal = 0;
for (let i = array.length - 2; i >= 0; i--) {
// if current value needs to be doubled
if (double) {
// value being doubled
value = array[i] * 2;
//console.log (`value doubled: ${value}`);
// make sure next iteration the value gets doubled
double = false;
if (value > 9) {
// value's digits add up when 9 is subtracted
value -= 9;
}
} else {
// value when not being doubled
value = array[i];
//console.log (`value: ${value}`);
double = true;
}
// add current value to running total
payloadTotal += value;
}
// add the check digit to the final sum
payloadTotal += array[array.length - 1];
//console.log(`payload total: ${payloadTotal}`);
// performs modulo 10 on value of total to determine validity of credit card number
let mod10 = payloadTotal % 10;
//console.log (`module 10 = ${mod10}`);
if (mod10 === 0) {
// valid credit card number
return true;
} else {
// invalid credit card number
return false;
}
};
validateCred(mystery3);
// function that finds invalid credit card numbers in an array
const findInvalidCards = (array) => {
//array.forEach(element => validateCred(element));
// array that will store credit card numbers found to be invalid
let invalidBatch = [];
// iterate through given array and validate credit card numbers
array.forEach(function (element) {
validateCred(element);
// if validation functions returns false aka invalid credit card number..
if (validateCred(element) === false) {
// ..add the number to the invalid credit card number array
invalidBatch.push(element);
}
});
// return the array of invalid credit card numbers
return invalidBatch;
};
findInvalidCards(batch);
// function to ID invalid credit card numbers
const idInvalidCardCompanies = (array) => {
// array to store all the invalid credit card numbers
let invalidCardBatch = findInvalidCards(batch);
// array of companies that have been found to have issued invalid credit card numbers
let invalidCardCompanies = [];
// iterate through array of..
array.forEach(function (element) {
// ..invalid credit card numbers
invalidCardBatch[element];
// if the first number of credit card number is 3, credit card company is Amex
if (element[0] === 3 && !invalidCardCompanies.includes("Amex")) {
invalidCardCompanies.push("Amex");
// if the first number of credit card number is 4, credit card company is Visa
} else if (element[0] === 4 && !invalidCardCompanies.includes("Visa")) {
invalidCardCompanies.push("Visa");
// if the first number of credit card number is 5, credit card company is Mastercard
} else if (
element[0] === 5 &&
!invalidCardCompanies.includes("Mastercard")
) {
invalidCardCompanies.push("Mastercard");
// if the first number of credit card number is 6, credit card company is Discover
} else if (element[0] === 6 && !invalidCardCompanies.includes("Discover")) {
invalidCardCompanies.push("Discover");
// if none of the previous criteria are not met, company is unknown
} else if (
element[0] !== 3 &&
element[0] !== 4 &&
element[0] !== 5 &&
element[0] !== 6
) {
invalidCardCompanies.push("Company not found");
}
});
// return array of credit card companies that issued invalid numbers
return invalidCardCompanies;
};
console.log(idInvalidCardCompanies(findInvalidCards(batch)));
const convertInvalid = (array) => {
let invalidConverted = [];
// boolean to determine whether to double current element when iterating through array
let double = true;
// value of each element
let value;
// total of added values
let payloadTotal = 0;
for (let i = array.length - 2; i >= 0; i--) {
// if current value needs to be doubled
if (double) {
// value being doubled
value = array[i] * 2;
//console.log (`value doubled: ${value}`);
// make sure next iteration the value gets doubled
double = false;
if (value > 9) {
// value's digits add up when 9 is subtracted
value -= 9;
}
} else {
// value when not being doubled
value = array[i];
//console.log (`value: ${value}`);
double = true;
}
// add current value to running total
payloadTotal += value;
}
// add the check digit to the final sum
payloadTotal += array[array.length - 1];
//console.log(`payload total: ${payloadTotal}`);
// performs modulo 10 on value of total to determine validity of credit card number
let mod10 = payloadTotal % 10;
// invalid credit card number
console.log(`Invalid credit card number: ${array}`);
// modulo 10 value of invalid credit card number
console.log (`modulo 10 = ${mod10}`);
for (let i = array.length - 2; mod10 >= 0; i--) {
if (mod10 === 0) {
// new and improved, valid credit card number
console.log(`Valid credit card number: ${array}`);
// modulo 10 value of valid credit card number
console.log (`modulo 10 = ${mod10}`);
return true;
}
if (array[i] <= 8) {
array[i] ++;
mod10 --;
}
}
};
console.log(convertInvalid(invalid1));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment