Hello!
- The first function validates a credit card, which returns either true or false depending if the credit card number passes the validation.
- The second check for invalid cards in a array with nested arrays.
My problem is that on the second function, the code seem to pass on the validation and only filter the invalid cards. But it returns empty arrays instead of the original arrays.
Can anyone help me here? Thanks!
// 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]
//
// ---------------- DEFINE YOUR FUNCTIONS HERE ----------------
//
// Verify if a credit card is valid based on Luhn algorithm.
function validateCred (arr) {
const checkDigits = [];
let doubleDigits = [];
const length = arr.length;
// Split numbers into check digits array and double digits array.
for (let i = 0; i < Math.round(length/2); i++){
checkDigits.push(arr.pop());
if (arr.length > 0){
doubleDigits.push(arr.pop());
}
}
// Double numbers and subtrac 9 if number > 9.
doubleDigits = doubleDigits.map(num => {
num += num;
if (num > 9) {
num -= 9;
}
return num;
});
// Check if sum of all numbers in both arrays divided by 10 has 0 remainder.
const sum = checkDigits.reduce((a,b) => a + b) + doubleDigits.reduce((a,b) => a + b)
if (sum % 10 === 0){
//console.log('True')
return true;
} else {
//console.log('False')
return false;
}
};
// Function that find invalid cards.
function findInvalidCards (arr) {
// PROBLEM ***
// Function is validading correctly but arrays are ***empty***.
return arr.filter(item => validateCred(item) === false);
};
console.log(findInvalidCards(batch));
Challenge Project: Credit Card Checker