Stuck on credit card checker project

Hello everyone,

I am quite new to javascript and I would need help to get the credit card checker project done. Here is 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: /////////////////////////

// creo una funzione per calcolare somma valori di array
const arrSum = arr => arr.reduce((a,b) => a + b, 0)

// inizializzo array di output
const doubledDigit = [];

// creo la funzione
function validateCred(card) {
  // iterazione partendo dall'ultimo numero a sinistra
  for(let digitIndex = (card.length - 1); digitIndex >= 0; digitIndex--){
    // push dei numeri che hanno index dispari in array di output
    if(digitIndex % 2 != 0){
      doubledDigit.push(card[digitIndex]);
      // eseguo computazione su numeri che hanno index pari
    } else if (digitIndex % 2 === 0) {
        // se il numero con index pari moltiplicato per due è maggiore di 10 sottraggo 9
        if(card[digitIndex]*2 > 9){
          doubledDigit.push(card[digitIndex]*2-9);
        // se il numero con index pari moltiplicato per due è minotre di 10 push
        } else {
          doubledDigit.push(card[digitIndex]*2);
      }
    }
  } 
  // verifico che somma array di output modulo 10 sia = 0. Se vero la carta è valida.
  if(arrSum(doubledDigit) % 2 === 0){
    console.log(true);
  } else {
    console.log(false);
  }
};

/* calling the function
validateCred(valid1)
validateCred(valid2)
validateCred(valid3)
validateCred(valid4)
validateCred(valid5)
validateCred(invalid1)
validateCred(invalid2)
validateCred(invalid3)
validateCred(invalid4)
validateCred(invalid5)
validateCred(mystery1)
validateCred(mystery2)
validateCred(mystery3)
validateCred(mystery4)
validateCred(mystery5) */

Now I have to create a function ‘findInvalidCards’ that iterates through the ‘batch’ array and push into a new array all the card that seems to be invalid. How can i do that?

Thanks

When I look at your current code I should think you are well able to figure that out.
You are basically already describing what it should do. Your turn to turn this in to code.

function ‘findInvalidCards’ that iterates through the ‘batch’ array and push into a new array all the card that seems to be invalid

Thanks for your comment.
Yes but I tried in many ways and my code did not work. Here I am looking for a possible solution to see if it runs properly. Later I will post here my code so that you could tell me what’s wrong with it.

It is better to go the other way round. Show us your code and we can guide you in the right direction. We are not here to deliver you the code on a silver platter :wink: .

2 Likes

You right :slight_smile:

Here is an example of code that shod work (?)

function findInvalidCards(cards) {
  let invalidCards = [];

  for (let k = 0; k < cards.length; k++) {
      if (!validateCred(cards[k])) {
      invalidCards.push(cards[k]);
    }
  }
   return invalidCards;
}

console.log(findInvalidCards(batch));

this seems to push ALL the credit cards, meaning that the condition is not evaluated properly…

1 Like