Created
January 29, 2022 21:34
-
-
Save peeczi/fa09017d1465c084b833aec73d3d4710 to your computer and use it in GitHub Desktop.
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, | |
]; | |
// 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