Credit Card Checker Project

Hi,

I’ve been playing around with the Credit Card Checker for a few days now, and it is starting to hurt my brain!! I managed to get the validateCred function to work, but when I attempt the second part it comes up with the error “TypeError: arr.slice is not a function at validateCred”.

Total newbie, so any help is appreciated!!

Thanks

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


function validateCred(arr) {
    let array = arr.slice(); 
    for (let i = (array.length - 2); i >= 0; i = i - 2) {
    array[i] = array[i] * 2; 
    if (array[i] > 9) {
        array[i] = array[i] - 9;
      } 
    }
  let arraySum = array.reduce((acc, cur) => acc + cur); 
  if (arraySum % 10 === 0) {
    return true  
  } else {
    return false
    }
};
console.log(validateCred(mystery1));


function findInvalidCards(cards) {
  let invalidCard = [];
  let validCard = [];
    for (let i=0; i=cards.length; i++) {
      if (cards = validateCred(true)){
        validCard.push
      } else {
        invalidCard.push
        }
      }
    };
    
console.log(findInvalidCards(batch))

Your issue is this part here. Firstly, that should be == or === to do a comparison, currently it is overwriting the cards variable. Secondly, you are calling validateCred() with the value of true. This argument needs to be an array for validateCred() to work. What you have currently is if true is a valid card, and equal to cards then.... What you should have is if cards[i] is a valid card then....

Hey I’m assuming you figured out the solution, I am getting the same error as you were and I doubt you remember exactly what you did but if you can, please help :slight_smile: thank you!

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
} 

findInvalidCards = card => {
  let invalidCard = []
  let validCard = []
  for (let i=0; i=card.length; i++){
  if (card[i] === validateCred()){
    validCard.push
  } else if (card[i] != validateCred){
    invalidCard.push
  }
  }
}
validateCred(valid1)
console.log(validateCred(valid1))
console.log(findInvalidCards(batch))

The reason you are getting the error is because in

it is trying to call the function validateCred() without an argument, instead of passing in an array (card) to be validated. I believe there are a few issues with how your validateCred() function works as it appears to be returning ‘7’ on a valid card, which should be 0 if it is valid, so have another look at that.

1 Like

ah ok. Thank you very much for the reply!

Let me know how you get on and ask if you need any more help!