diff --git a/README.md b/README.md index fe00877..25869e0 100644 --- a/README.md +++ b/README.md @@ -29,3 +29,21 @@ const { isEncryptedToken } = require("card-validator-utils"); isEncryptedToken('42424242F242R24242424242F24242424242424C424X') ``` + +`detectCardType` function to detect card type + +currently it supports + +1. diners club +2. visa +3. mastercard +4. american express +5. discover + +``` +const { detectCardType } = require("card-validator-utils"); + +var cardType = detectCardType(cardNumber); +console.log(cardType); // Output: diners club + +``` diff --git a/index.js b/index.js index f6a0aba..3a3af2f 100644 --- a/index.js +++ b/index.js @@ -14,7 +14,32 @@ function isEncryptedToken(token) { return false; } +function detectCardType(cardNumber) { + // Define regular expressions for different card types + var visaPattern = /^4[0-9]{12}(?:[0-9]{3})?$/; + var mastercardPattern = /^5[1-5][0-9]{14}$/; + var amexPattern = /^3[47][0-9]{13}$/; + var discoverPattern = /^6(?:011|5[0-9]{2})[0-9]{12}$/; + var dinersClubPattern = /^3(?:0[0-5]|[68][0-9])[0-9]{11}$/; + + // Match the card number against the regular expressions + if (dinersClubPattern.test(cardNumber)) { + return "diners club"; + } else if (visaPattern.test(cardNumber)) { + return "visa"; + } else if (mastercardPattern.test(cardNumber)) { + return "mastercard"; + } else if (amexPattern.test(cardNumber)) { + return "american express"; + } else if (discoverPattern.test(cardNumber)) { + return "discover"; + } else { + return "invalid"; + } +} + module.exports = { isCreditCard, isEncryptedToken, + detectCardType, }; diff --git a/package.json b/package.json index 7d99757..8a9cb5f 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,17 @@ "url": "git+https://github.com/vigneshkb7/card-validator-utils.git" }, "keywords": [ - "card-validator-utils" + "card-validator-utils", + "credit-card-validator", + "card-validate", + "card-validator-utils", + "card-validator-js", + "card-checker", + "credit-card-utils", + "card-validation-kit", + "card-validation-js", + "cc-validator", + "card-validator-lib" ], "author": "vignesh balaji", "license": "ISC", diff --git a/test/index.test.js b/test/index.test.js index a2ff888..366eb36 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -1,4 +1,4 @@ -const { isCreditCard, isEncryptedToken } = require("../index"); +const { isCreditCard, isEncryptedToken, detectCardType } = require("../index"); describe("Testing credit card Functionality", () => { test("should return true for valida cards", () => { @@ -12,7 +12,7 @@ describe("Testing credit card Functionality", () => { }); }); -describe("Testing credit card Functionality", () => { +describe("Testing Token Number Functionality", () => { test("should return true for valid tokens", () => { expect( isEncryptedToken("42424242F242R24242424242F24242424242424C424X") @@ -24,3 +24,18 @@ describe("Testing credit card Functionality", () => { ); }); }); + +describe("Testing Card Type", () => { + test("should return correct cart type", () => { + expect(detectCardType("4532015112890368")).toBe("visa"); + expect(detectCardType("5555555555554444")).toBe("mastercard"); + expect(detectCardType("378282246310005")).toBe("american express"); + expect(detectCardType("6011111111111117")).toBe("discover"); + expect(detectCardType("6011601160116611")).toBe("discover"); + expect(detectCardType("6011000990139424")).toBe("discover"); + expect(detectCardType("30569309025904")).toBe("diners club"); + }); + test("should return invalid", () => { + expect(detectCardType("45320112890368")).toBe("invalid"); + }); +});