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.