Credit Card Checker Struggles

I’m very new to JavaScript so forgive me if the following is very “noob-y”:

So I’ve been working on the Credit Card Checker project and have gotten myself stuck.

I’ve created a function that determines whether or not the card number is valid and it works great. The problem shows up when trying to create a function that will use the batch array to go through the previous function to check if each individual card is valid or not.

In the first function, I have it logging the sum of each card number after the Luhn algorithm, and saying whether it’s valid or not.

When running the new function, I can see every sum is being added onto the last, rather than staying separate.

I’m assuming I did something wrong with how I’m finding the sum of the numbers after the Luhn algorithm, I just can’t seem to get anything working correctly.

Any help is appreciated, thanks!

My 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];

// 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:
let sum = 0;
let array = [];
const validateCard = (card) => {
  checkCard = card.reverse();
  for (let i = 0 ; i < checkCard.length ; i++)
    {
      if ( i % 2 !== 0 ) {
        checkCard[i] = checkCard[i] * 2
        if (checkCard[i] > 9) {
          checkCard[i] = checkCard[i] - 9;
        }
      }
      sum = sum + checkCard[i];
    }
  console.log(sum);
  if (sum % 10 === 0) {
    console.log('Card Valid')
  }
  else {
    console.log('Card Invalid')
  }
}
const findInvalidCards = (cardArray) => {
  for (let j = 0 ; j < cardArray.length ; j++)
    {
      validateCard(cardArray[j])
    }
}
findInvalidCards(batch)
1 Like

Hello, @joshkolenko746895537.

Welcome to the forums. Kudos on a great first post including correctly formatting your code!

I haven’t gone through your code very thoroughly, but on first glance, your sum variable is updated inside a for loop in your function. It is declared, however, outside of the function: let sum = 0;. There’s nothing wrong with the declaration itself except for its location. Having been declared outside of the function, it has global scope. So it will continue to accumulate each value added to it without ever being ‘reset’ to 0.

Excellent response! That actually fixed everything with that issue. If I have further issues with this project, is it proper to update this post or create a new post altogether?

1 Like

Here will be fine. I’m going to re-categorize the topic. We try to keep project related questions under the projects category. Happy coding!