Credit card checker

Guys I’m currently making the credit card checker but My program invalid an array that seems to be right. Can anyone help me?

// 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:

function validateCred(arr){
  let reverseArr = arr.reverse()
  let sum = 0;
  for (let i = 0; i < reverseArr.length; i+= 2){
    sum += reverseArr[i];
    sum += reverseArr[i+1] * 2;
    if (reverseArr[i+1] * 2 > 9){
      sum -= 9;
    }
  }
  if (sum % 10 === 0){
    return true
  }else{
    return false
  }
}

function findInvalidCards(arr000) {
  let invalidArr = []
  for (let j = 0; j < arr000.length; j++) {
    if (validateCred(arr000[j]) === false) {
      invalidArr.push(arr000[j])
    }
  }
  return invalidArr;
}


let arr = [4,5,5,6,7,3,7,5,8,6,8,9,9,8,5]
let arr1 = 6
console.log(validateCred(valid3))

console.log(findInvalidCards(batch))




Hi @net8480297759
Welcome to the forum!
I find your approach to increase I by 2 quite clever, but it is a problem, that the amount of digits is not the same for each credit card. Sometimes it is even, sometimes odd. And the few which have an even amount of digits are a problem here because [i+1] when the iteration is at the last round doesn’t exist in these cases.
Log the sum when you run the function with valid3: The last log is NaN.

@mirja_t
Thank you for the reply!
So I can add a control flow to check if the array is even or odd. And then?

Either you increase i in the for loop by one and filter every other digit inside the loop to double it or you check if the amount of digits is even and then you don’t do the step for [i+1] in the last loop.

@mirja_t
Thank you!
Now i can fix it.

1 Like