Credit Card Checker - IF Statement Logic

I was double-checking the if statement and was really stumped to see the results for the first valid1 array total come up to 80 which equals to true, the only value that does not come to true is valid3.

I cannot figure out why everything else equates to true except that array.

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: const validateCred = (array) => { let total = 0; for (var i = array.length -1; i >= 0; i--){ // console.log(array[i]) if (i % 2 === 0){ array[i] *= 2; // console.log(array[i]) if (array[i] > 9){ array[i] -= 9; } } total += array[i] console.log(total) } return total % 10 === 0; }; console.log(validateCred(valid3))

Hello there!
The ‘every other digit is doubled’ starts at the end and goes to the front of the array. Yours checks every index which is divisible by 2.
This will work for cards with an even length. but because 3 isn’t it wont.
i.e.
you’re code will double indexes with * below;
[*, 1, *, 3, *, 5, *]
whereas it should be doubling;
[0, *, 2, *, 4, *, 6]

Hey thank you for letting me know, I was trying to figure that out, what is getting me confused is trying to get every odd index within the array, which i was thinking was either i % 2 === 1 or something along those lines will definitely test more conditions out.

1 Like

No worries. Took me a while to get something that worked.

Shout up if need any more help.

Have fun!

1 Like

I will do, thank you so much!

I am still very new to the coding world but I really want to learn!