Credit Card Checker Challenge Project (JavaScript)

Hi, the following is my code :slight_smile:

// 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: //validateCred() checks a credit number valid or not. const validateCred = (arr) => { const newarr = [...arr]; newarr.reverse(); for (let i = 1; i < newarr.length; i += 2) { newarr[i] = newarr[i] * 2; if (newarr[i] > 9) { newarr[i] -= 9; } } let sum = 0; for (let i = 0; i < newarr.length; i++) { sum += newarr[i]; } if (sum % 10 === 0) { return true; } else { return false; } }; //findInvalidCards() outputs an array of invalid card numbers. const findInvalidCards = (nestedarr) => { let invalidList = []; for (let i = 0; i < nestedarr.length; i++) { if (validateCred(nestedarr[i]) === false) { invalidList.push(nestedarr[i]); } } return invalidList; }; //idInvalidCardCompanies() outputs a list of companies that issue invalid card numbers in the above invalid list. const idInvalidCardCompanies = (nestedarr) => { let firstDigits = []; for (let i = 0; i < nestedarr.length; i++) { firstDigits.push(nestedarr[i][0]); } console.log(`There are ${firstDigits.length} invalid card numbers. `); console.log("First digits of the found invalid card numbers: " + firstDigits); let companyList = []; if (firstDigits.some((digit) => digit === 3)) { companyList.push("Amex (American Express)"); } if (firstDigits.some((digit) => digit === 4)) { companyList.push("Visa"); } if (firstDigits.some((digit) => digit === 5)) { companyList.push("Mastercard"); } if (firstDigits.some((digit) => digit === 6)) { companyList.push("Discover"); } // the following if statement: .filter() attempts to find the numbers either greater than 6 or less than 3, if there is any, 'an unnamed company' will be added to the company list. let notdigit3to6 = firstDigits.filter((digit) => digit < 3 || digit > 6); if (notdigit3to6.length !== 0) { companyList.push("an unnamed company"); } console.log( "List of Companies that issue invalid numbers: " + companyList.join(", ") ); }; //test these functions! findInvalidCards(batch); idInvalidCardCompanies(findInvalidCards(batch));

Here is my solution to the credit card checker exercise. I feel I’ve manged to create some efficient code that does the job. Plenty of console.log throughout the code which really helped me see what was happening and if it was what I was expecting. Good luck and message if you have any questions