Advertisement
makispaiktis

Codecademy - Open Exercise (CreditCardsChecker.js)

Dec 17th, 2019 (edited)
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ******************************************************************** DATA **************************************************************************************************
  2. // ******************************************************************** DATA **************************************************************************************************
  3. // ******************************************************************** DATA **************************************************************************************************
  4. // ******************************************************************** DATA **************************************************************************************************
  5.  
  6.  
  7. // All valid credit card numbers
  8. const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8];
  9. const valid2 = [5, 5, 3, 5, 7, 6, 6, 7, 6, 8, 7, 5, 1, 4, 3, 9];
  10. const valid3 = [3, 7, 1, 6, 1, 2, 0, 1, 9, 9, 8, 5, 2, 3, 6];
  11. const valid4 = [6, 0, 1, 1, 1, 4, 4, 3, 4, 0, 6, 8, 2, 9, 0, 5];
  12. const valid5 = [4, 5, 3, 9, 4, 0, 4, 9, 6, 7, 8, 6, 9, 6, 6, 6];
  13.  
  14. // All invalid credit card numbers
  15. const invalid1 = [4, 5, 3, 2, 7, 7, 8, 7, 7, 1, 0, 9, 1, 7, 9, 5];
  16. const invalid2 = [5, 7, 9, 5, 5, 9, 3, 3, 9, 2, 1, 3, 4, 6, 4, 3];
  17. const invalid3 = [3, 7, 5, 7, 9, 6, 0, 8, 4, 4, 5, 9, 9, 1, 4];
  18. const invalid4 = [6, 0, 1, 1, 1, 2, 7, 9, 6, 1, 7, 7, 7, 9, 3, 5];
  19. const invalid5 = [5, 3, 8, 2, 0, 1, 9, 7, 7, 2, 8, 8, 3, 8, 5, 4];
  20.  
  21. // Can be either valid or invalid
  22. const mystery1 = [3, 4, 4, 8, 0, 1, 9, 6, 8, 3, 0, 5, 4, 1, 4];
  23. const mystery2 = [5, 4, 6, 6, 1, 0, 0, 8, 6, 1, 6, 2, 0, 2, 3, 9];
  24. const mystery3 = [6, 0, 1, 1, 3, 7, 7, 0, 2, 0, 9, 6, 2, 6, 5, 6, 2, 0, 3];
  25. const mystery4 = [4, 9, 2, 9, 8, 7, 7, 1, 6, 9, 2, 1, 7, 0, 9, 3];
  26. const mystery5 = [4, 9, 1, 3, 5, 4, 0, 4, 6, 3, 0, 7, 2, 5, 2, 3];
  27.  
  28. // An array of all the arrays above
  29. const batch = [valid1, valid2, valid3, valid4, valid5, invalid1, invalid2, invalid3, invalid4, invalid5, mystery1, mystery2, mystery3, mystery4, mystery5];
  30.  
  31.  
  32. // *********************  FUNCTION 1  ****************************************************************************************************************************************
  33. // *********************  FUNCTION 1  ****************************************************************************************************************************************
  34. // *********************  FUNCTION 1  ****************************************************************************************************************************************
  35. // *********************  FUNCTION 1  ****************************************************************************************************************************************
  36.  
  37.  
  38. // Add your functions below:
  39. function validateCred(arr){
  40.   // Luhn Algorithm
  41.   /*
  42.   The formula verifies a number against its included check digit, which is usually appended to a partial account number to generate the full account number. This number must pass the following test:
  43.  
  44.   From the rightmost digit (excluding the check digit) and moving left, double the value of every second digit. The check digit is neither doubled nor included in this calculation; the first digit doubled is the digit located immediately left of the check digit. If the result of this doubling operation is greater than 9 (e.g., 8 × 2 = 16), then add the digits of the result (e.g., 16: 1 + 6 = 7, 18: 1 + 8 = 9) or, alternatively, the same final result can be found by subtracting 9 from that result (e.g., 16: 16 − 9 = 7, 18: 18 − 9 = 9).
  45.   Take the sum of all the digits.
  46.    If the total modulo 10 is equal to 0 (if the total ends in zero) then the number is valid according to the Luhn formula; otherwise it is not valid.
  47.   */
  48.   let sum = 0;
  49.   for(let i=arr.length-1; i>=0; i--){
  50.       if((arr.length - 1 - i) % 2 === 0){
  51.           // DONT DOUBLE
  52.           sum += arr[i];
  53.       }
  54.       else{
  55.           // DOUBLE
  56.           let element = 2 * arr[i];
  57.           if(element < 10){
  58.               sum += element;
  59.           }
  60.           else{
  61.               sum += (element - 9);
  62.           }
  63.       }
  64.   }  
  65.  
  66.   if(sum % 10 === 0){
  67.       return true;
  68.   }
  69.   else{
  70.       return false;
  71.   }
  72.  
  73. }
  74.  
  75. // Test functions:
  76. console.log("Checking Function 1: ValidateCred(arr)");
  77. console.log(validateCred(valid1)); // Should print true
  78. console.log(validateCred(invalid1)); // Should print false
  79. console.log();
  80. console.log();
  81.  
  82.  
  83. // **********************************************  FUNCTION 2  ***************************************************************************************************************
  84. // **********************************************  FUNCTION 2  ***************************************************************************************************************
  85. // **********************************************  FUNCTION 2  ***************************************************************************************************************
  86. // **********************************************  FUNCTION 2  ***************************************************************************************************************
  87.  
  88.  
  89. function findInvalidCards(nestedArray){
  90.     let invalidArray = [];
  91.     for(let i=0; i<nestedArray.length; i++){
  92.         if(validateCred(nestedArray[i]) == false){
  93.             invalidArray.push(nestedArray[i]);
  94.         }
  95.     }
  96.     return invalidArray;
  97. }
  98.  
  99. // Test functions:
  100. console.log("Checking Function 2: findInvalidCards(nestedArray)");
  101. console.log(findInvalidCards([valid1, valid2, valid3, valid4, valid5]));// Shouldn't print anything
  102. console.log(findInvalidCards([invalid1, invalid2, invalid3, invalid4, invalid5])); // Should print all of the numbers
  103. console.log();
  104. console.log();
  105.  
  106.  
  107. // ***********************************************************************  FUNCTION 3  **************************************************************************************
  108. // ***********************************************************************  FUNCTION 3  **************************************************************************************
  109. // ***********************************************************************  FUNCTION 3  **************************************************************************************
  110. // ***********************************************************************  FUNCTION 3  **************************************************************************************
  111.  
  112.  
  113.  
  114. function idInvalidCardCompanies(card){
  115.     companies = [];
  116.     let firstIndex = card[0];
  117.     switch(firstIndex){
  118.          case 3:
  119.             companies.push('Amex');
  120.             break;
  121.         case 4:
  122.             companies.push('Visa');
  123.             break;
  124.         case 5:
  125.             companies.push('Mastercard');
  126.             break;
  127.         case 6:
  128.             companies.push('Discover');
  129.             break;
  130.         default:
  131.             companies.push('Company not found');
  132.             break;
  133.     }
  134.    
  135.     // Now, companies array contains duplicates of each company
  136.     // One example ----> companies = ['visa', 'amex', 'amex', 'discover', 'mastercard', 'discover', 'visa', 'amex', 'discover', 'discover']
  137.     companies.sort();
  138.     // Our array is clastered ---> so the same elements will be nearby
  139.     // One example ----> companies = ['amex', 'amex', 'amex', 'discover, 'discover, 'discover, 'discover, 'mastercard', 'visa', 'visa']
  140.     for(let i=0; i<companies.length-1; i++){
  141.         if(companies[i] === companies[i+1]){
  142.             companies.splice(i,1);
  143.         }
  144.     }
  145.     return companies;  
  146. }
  147.  
  148.  
  149.  
  150. // Test functions:
  151. console.log("Checking Function 3: idInvalidCardCompanies(card)");
  152. console.log(idInvalidCardCompanies(invalid1)); // Should print['visa']
  153. console.log(idInvalidCardCompanies(invalid2)); // Should print ['mastercard']
  154. console.log(idInvalidCardCompanies(invalid3)); // Should print['amex']
  155. console.log(idInvalidCardCompanies(invalid4)); // Should print ['discover']
  156. console.log(idInvalidCardCompanies(invalid5)); // Should print ['mastercard']
  157.  
  158. // I will check the mystery cards
  159. mystery = [mystery1, mystery2, mystery3, mystery4, mystery5];
  160. console.log();
  161. console.log("Mystery array has these invalid cards: ");
  162. let invalidMysteryCards = findInvalidCards(mystery);
  163. for(let i=0; i<invalidMysteryCards.length; i++){
  164.     console.log("Card " + invalidMysteryCards[i] + " ----> Company: " + idInvalidCardCompanies(invalidMysteryCards[i]));
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement