Skip to content

Commit

Permalink
Merge pull request #1 from vigneshkb7/card-type
Browse files Browse the repository at this point in the history
Card type validation
  • Loading branch information
vigneshkb7 committed Jun 26, 2023
2 parents 474fc5a + f63533c commit 4dd8ee8
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 3 deletions.
18 changes: 18 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
```
25 changes: 25 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
};
12 changes: 11 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
19 changes: 17 additions & 2 deletions test/index.test.js
Original file line number Diff line number Diff line change
@@ -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", () => {
Expand All @@ -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")
Expand All @@ -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");
});
});

0 comments on commit 4dd8ee8

Please sign in to comment.