# Credit Card step 7 make card valid

Hello,
I am trying to do the extra challenge in Credit Card Checker Project, making the invalid card numbers into valid ones.
The invalid numbers start with 3,4,5 or 6, so I am trying to change array[i][0] to either 1,2,7 or 8 and add the new valid numbers to an array. Look at makeCardValid function at the bottom.

currently I’m getting the exact opposite of what I want, a huge array of invalid numbers…

I’ve tried doing

• case: if (index !== -1) for each case in the switch statement and I get an empty array
• const index = array.indexOf(array[i]) instead of const index = nowValid.indexOf(array[i])

and

• nowValid.indexOf(array[i][0])

Any help is appreciated! Thank you

``````// 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];

validateCred = arr => {
const len = arr.length
const parity = len % 2
let sum = 0
for (var i = len-1; i>=0; i--){
let dub = parseInt(arr[i])
if (i % 2 === parity) {dub *= 2}
if (dub > 9) {dub -= 9}
sum += dub
}     return sum % 10
}
luhn_caclulate = partcode => {
var checksum = (partcode + "0")
return checksum == 0 ? 0 : 10 - checksum
}

/* luhn_validate
* Return true if specified code (with check digit) is valid.
*/
luhn_validate = fullcode => {
return validateCred(fullcode) == 0
}

// console.log(luhn_validate(valid1))

findInvalidCards = card => {
let invalidCard = []
for (let i=0; i < card.length; i++){
if (!validateCred(card[i])){
invalidCard.push(card[i])
}
}
return invalidCard;
}

invCards = findInvalidCards(batch)
console.log(invCards)

idInvalidCardCompanies = array =>{
const companies = []
// array.forEach(arr => arr.forEach(elmnt => {
//   let firstDigit = elmnt.shift
//   console.log(firstDigit)
for (i=0; i < array.length; i++){
switch (array[i][0]) {
case 3:
if (companies.indexOf('Amex') === -1) {
companies.push('Amex')
}
break;
case 4:
if (companies.indexOf('Visa') === -1) {
companies.push('Visa')
}
break;
case 5:
if (companies.indexOf('Mastercard') === -1) {
companies.push('Mastercard')
}
break;
case 6:
if (companies.indexOf('Discover') === -1) {
companies.push('Discover')
}
break;
default:
}
} return companies
}

console.log(idInvalidCardCompanies([invalid1]));
console.log(idInvalidCardCompanies([invalid2]));
console.log(idInvalidCardCompanies(invCards));

makeCardValid = array =>{
nowValid = []
for (i=0; i < array.length; i++){
const index = nowValid.indexOf(array[i])
// const index = array.indexOf(array[i])
switch (array[i][0]) {
case 3:
if (index === -1) {
array[index] = 1
nowValid.push(array);
}
break;
case 4:
if (index === -1) {
array[index] = 2
nowValid.push(array);
}
break;
case 5:
if (index === -1) {
array[index] = 7
nowValid.push(array);
}
break;
case 6:
if (index === -1) {
array[index] = 8
nowValid.push(array);
}
break;
}
}
return nowValid
}

console.log(makeCardValid(invCards))

``````

Hi @core2761115992
I haven’t checked if your approach would actually lead to success, so I just concentrate to why your `index` variable doesn’t store anything but -1 for now:

You are trying to find out the index of a value inside an empty array `nowValid`. I think you should add the keyword `const` to declare the array, but still it’s an empty array. Therefore nowValid.indexOf() cannot return anything else than -1.
But even if you replace it with with `array.indexOf(array[i])` it would just return the same value as `i`. Which value are you trying to store in the `index` variable?