0

In here I have used Luhn algorithms to validate if credit card number is valid. The validateCred function works perfectly but in the second function I want only arrays of invalid CC numbers to get added to the invalidCCN array. But because of something instead of the exact CC number array, the arr variable gets pushed into the invalidCCN. I have tried accessing it via its index and itself but both are not working!

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


const validateCred = array => {
  // console.log('before')
  // console.log(array)
  let arr = array
  for (let x = arr.length - 2; x >= 0; x -= 2) {
    arr[x] = arr[x] * 2
    if (arr[x] > 9) {
      arr[x] = arr[x] - 9
    }
  }
  // console.log('after')
  // console.log(arr)
  const sum = arr.reduce((a, b) => a + b, 0)
  if (sum % 10 === 0) {
    return true
  } else {
    return false
  }

}

const findInvalidCards = array => {
  let invalidCCN = []
  for (let x = 0; x < array.length; x++) {
    if (!validateCred(array[x])) {
      invalidCCN.push(array[x])
    }
  }
  // array.forEach(ccNumber => {
  //     if (!validateCred(ccNumber)) {
  //         console.log(false)
  //         invalidCCN.push(ccNumber)
  //     }
  // })
  console.log(invalidCCN)
}

findInvalidCards(batch)

Expected outcome:

[
  4, 5, 3, 2, 7, 7,
  8, 7, 7, 1, 0, 9,
  1, 7, 9, 5
] [
  5, 7, 9, 5, 5, 9,
  3, 3, 9, 2, 1, 3,
  4, 6, 4, 3
] [
  3, 7, 5, 7, 9, 6,
  0, 8, 4, 4, 5, 9,
  9, 1, 4
] [
  6, 0, 1, 1, 1, 2,
  7, 9, 6, 1, 7, 7,
  7, 9, 3, 5
] [
  5, 3, 8, 2, 0, 1,
  9, 7, 7, 2, 8, 8,
  3, 8, 5, 4
] [
  3, 4, 4, 8, 0, 1,
  9, 6, 8, 3, 0, 5,
  4, 1, 4
] [
  6, 0, 1, 1, 3, 7, 7,
  0, 2, 0, 9, 6, 2, 6,
  5, 6, 2, 0, 3
] [
  4, 9, 2, 9, 8, 7,
  7, 1, 6, 9, 2, 1,
  7, 0, 9, 3
]

Since these are not valid credit card numbers. Instead the outcome is:

[
    8, 5, 6, 2, 5, 7,
    7, 7, 5, 1, 0, 9,
    2, 7, 9, 5
  ],
  [
    1, 7, 9, 5, 1, 9,
    6, 3, 9, 2, 2, 3,
    8, 6, 8, 3
  ],
  [
    3, 5, 5, 5, 9, 3,
    0, 7, 4, 8, 5, 9,
    9, 2, 4
  ],
  [
    3, 0, 2, 1, 2, 2,
    5, 9, 3, 1, 5, 7,
    5, 9, 6, 5
  ],
  [
    1, 3, 7, 2, 0, 1,
    9, 7, 5, 2, 7, 8,
    6, 8, 1, 4
  ],
  [
    3, 8, 4, 7, 0, 2,
    9, 3, 8, 6, 0, 1,
    4, 2, 4
  ],
  [
    6, 0, 1, 2, 3, 5, 7,
    0, 2, 0, 9, 3, 2, 3,
    5, 3, 2, 0, 3
  ],
  [
    8, 9, 4, 9, 7, 7,
    5, 1, 3, 9, 4, 1,
    5, 0, 9, 3
  ]
]

The outcome is the arrays after going to for loop in validateCred even though I have not returned them.

depperm
  • 10,606
  • 4
  • 43
  • 67
Coder_IXJ
  • 11
  • 1
  • 2
    [How to debug small programs](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) and [What is a debugger and how can it help me diagnose problems?](https://stackoverflow.com/q/25385173) – VLAZ Jan 18 '23 at 14:52
  • 1
    [You are *mutating the arrays* in `validateCred`](https://jsbin.com/segamug/edit?js,console). So what you see is the items that were marked invalid but after they have been changed. So, *don't* alter them and you'd see the initial values for the array. – VLAZ Jan 18 '23 at 14:59

0 Answers0