Credit Card Checker Project: How do I calculate the sum?

Hello to all,

I am on the Credit Card Checker Project in the Full-Stack Engineer Path. The URL of the exercise can be found here.

I am trying to validate the credit card number based on the sum, but the sum that I find is wrong, which results in an invalid credit card when I know it is valid based on the array of the valid cards.

Here is my source code:

// 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]
// const valid6 = [4, 5, 3, 9, 6, 8, 9, 8, 8, 7, 7, 0, 5, 7, 9, 8]

// 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 validateCredit(valid) {
    /*  
    Start with valid.length - 2, because last element does not count.
    Then, use i-- and every other element, double the digit
    If the number is greater than 9, subtract 9 from that number
    For example if an array length is 16 and you subtract 1 from it, because
    the last item does not count, then you have an odd array, 15
    If an array length is 15 and you subtract 1 from it, because
    the last item does not count, then you have an even array, 14
    Then, for the starter even array, you want to find the sum of all the elements that
    their index is odd, then multiply their value and if their value is greater than 9,
    then subtract 9.
    On the other hand, if the starter array is odd, you want to find all the sum of the elements
    that their index is even and that's that.
    Their you will find their sum.
    Array Length = 16 --> Even
    valid.length = 16
    16 - 2 = 14
    */
    let sum = 0;
    let sum0 = 0;
    let sum1 = 0;
    let sum2 = 0;
    console.log("Array Length: " + valid.length);
    for (let i = valid.length - 2; i >= 0; i--) {
        console.log("[" + i + "] - " + valid[i]);
        // If array is even
        // [0] - [15]
        if (valid.length % 2 == 0) {
            if (i % 2 == 0) {
                valid[i] = valid[i] * 2;
                if (valid[i] > 9) {
                    valid[i] = valid[i] - 9;
                    sum1 = sum1 + valid[i];
                    console.log("sum1:" + sum1 + " of [" + i + "]");
                }
                else {
                    sum0 = sum0 + valid[i];
                    console.log("sum0:" + sum0 + " of [" + i + "]");
                }
            }
            else {
                sum2 = sum2 + valid[i];
                console.log("sum2:" + sum2 + " of [" + i + "]");
            }   
        }
        sum = sum0 + sum1 + sum2;
    }
    if (sum % 10 == 0) {
        console.log("Sum: " + sum + " - Number is Valid.\n");
    }
    else {
        console.log("Sum: " + sum + " - Number is Invalid.\n");
    }
}

validateCredit(valid1);

Thanks in advance!

Hi Marios,
welcome to the forums!

If i remember the Luhn algorithm correctly, you should double every other digit and subtract nine if it became larger than nine. But for the sum all digits matter. But you just add every other digit to the sum variables.
You also need to add the sums just once – not in each loop as you currently do. But that is not causing the error since you overwrite sum each time. It’s just redundant.
For the following steps the hint from step 3 becomes crucial:

Do not mutate the original arrays, you should make a copy instead

If you log valid1 after you ran the function it’s not the same anymore.

1 Like