creditcard.js 3.0.45 → 3.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/creditcard.js +2 -2
- package/dist/creditcard.min.js +162 -2
- package/package.json +10 -7
package/dist/creditcard.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @name creditcard.js 3.0.
|
|
2
|
+
* @name creditcard.js 3.0.45
|
|
3
3
|
* @license MIT
|
|
4
4
|
* @author ContaAzul (contaazul.com)
|
|
5
5
|
*/
|
|
@@ -154,4 +154,4 @@ function sumNumber(number) {
|
|
|
154
154
|
sum += (even = !even) ? computed[digit] : digit;
|
|
155
155
|
}
|
|
156
156
|
return sum;
|
|
157
|
-
}exports.getCreditCardNameByNumber=getCreditCardNameByNumber;exports.isExpirationDateValid=isExpirationDateValid;exports.isSecurityCodeValid=isSecurityCodeValid;exports.isValid=isValid;
|
|
157
|
+
}exports.getCreditCardNameByNumber=getCreditCardNameByNumber;exports.isExpirationDateValid=isExpirationDateValid;exports.isSecurityCodeValid=isSecurityCodeValid;exports.isValid=isValid;}));
|
package/dist/creditcard.min.js
CHANGED
|
@@ -1,6 +1,166 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @name creditcard.js 3.0.
|
|
2
|
+
* @name creditcard.js 3.0.45
|
|
3
3
|
* @license MIT
|
|
4
4
|
* @author ContaAzul (contaazul.com)
|
|
5
5
|
*/
|
|
6
|
-
|
|
6
|
+
'use strict';
|
|
7
|
+
|
|
8
|
+
var CARDS = [{
|
|
9
|
+
name: 'Banescard',
|
|
10
|
+
bins: /^(603182)[0-9]{10,12}/,
|
|
11
|
+
codeLength: 3
|
|
12
|
+
}, {
|
|
13
|
+
name: 'Maxxvan',
|
|
14
|
+
bins: /^(603182)[0-9]{10,12}/,
|
|
15
|
+
codeLength: 3
|
|
16
|
+
}, {
|
|
17
|
+
name: 'Cabal',
|
|
18
|
+
bins: /^(604324|604330|604337|604203|604338)[0-9]{10,12}/,
|
|
19
|
+
codeLength: 3
|
|
20
|
+
}, {
|
|
21
|
+
name: 'GoodCard',
|
|
22
|
+
bins: /^(606387|605680|605674|603574)[0-9]{10,12}/,
|
|
23
|
+
codeLength: 3
|
|
24
|
+
}, {
|
|
25
|
+
name: 'Elo',
|
|
26
|
+
bins: /^(401178|401179|431274|438935|451416|457393|457631|457632|504175|627780|636297|636368|(506699|5067[0-6]\d|50677[0-8])|(50900\d|5090[1-9]\d|509[1-9]\d{2})|65003[1-3]|(65003[5-9]|65004\d|65005[0-1])|(65040[5-9]|6504[1-3]\d)|(65048[5-9]|65049\d|6505[0-2]\d|65053[0-8])|(65054[1-9]|6505[5-8]\d|65059[0-8])|(65070\d|65071[0-8])|65072[0-7]|(6509[0-9])|(65165[2-9]|6516[6-7]\d)|(65500\d|65501\d)|(65502[1-9]|6550[3-4]\d|65505[0-8]))[0-9]{10,12}/,
|
|
27
|
+
codeLength: 3
|
|
28
|
+
}, {
|
|
29
|
+
name: 'Diners',
|
|
30
|
+
bins: /^3(?:0[0-5]|[68][0-9])[0-9]{11}$/,
|
|
31
|
+
codeLength: 3
|
|
32
|
+
}, {
|
|
33
|
+
name: 'Discover',
|
|
34
|
+
bins: /^6(?:011|5[0-9]{2}|4[4-9][0-9]{1}|(22(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[01][0-9]|92[0-5]$)[0-9]{10}$))[0-9]{12}$/,
|
|
35
|
+
codeLength: 4
|
|
36
|
+
}, {
|
|
37
|
+
name: 'Amex',
|
|
38
|
+
bins: /^3[47][0-9]{13}$/,
|
|
39
|
+
codeLength: 4
|
|
40
|
+
}, {
|
|
41
|
+
name: 'Aura',
|
|
42
|
+
bins: /^50[0-9]{14,17}$/,
|
|
43
|
+
codeLength: 3
|
|
44
|
+
}, {
|
|
45
|
+
name: 'Mastercard',
|
|
46
|
+
bins: /^(603136|603689|608619|606200|603326|605919|608783|607998|603690|604891|603600|603134|608718|603680|608710|604998)|(5[1-5][0-9]{14}|2221[0-9]{12}|222[2-9][0-9]{12}|22[3-9][0-9]{13}|2[3-6][0-9]{14}|27[01][0-9]{13}|2720[0-9]{12})$/,
|
|
47
|
+
codeLength: 3
|
|
48
|
+
}, {
|
|
49
|
+
name: 'Visa',
|
|
50
|
+
bins: /^4[0-9]{12}(?:[0-9]{3})?$/,
|
|
51
|
+
codeLength: 3
|
|
52
|
+
}, {
|
|
53
|
+
name: 'Hipercard',
|
|
54
|
+
bins: /^(38[0-9]{17}|60[0-9]{14})$/,
|
|
55
|
+
codeLength: 3
|
|
56
|
+
}, {
|
|
57
|
+
name: 'JCB',
|
|
58
|
+
bins: /^(?:2131|1800|35\d{3})\d{11}$/,
|
|
59
|
+
codeLength: 3
|
|
60
|
+
}];
|
|
61
|
+
|
|
62
|
+
var MILLENNIUM = 1000;
|
|
63
|
+
var DEFAULT_CODE_LENGTH = 3;
|
|
64
|
+
var getCreditCardNameByNumber = function getCreditCardNameByNumber(number) {
|
|
65
|
+
return findCreditCardObjectByNumber(number).name || 'Credit card is invalid!';
|
|
66
|
+
};
|
|
67
|
+
var isSecurityCodeValid = function isSecurityCodeValid(creditCardNumber, securityCode) {
|
|
68
|
+
var numberLength = getCreditCardCodeLengthByNumber(creditCardNumber);
|
|
69
|
+
return new RegExp("^[0-9]{".concat(numberLength, "}$")).test(securityCode);
|
|
70
|
+
};
|
|
71
|
+
var isExpirationDateValid = function isExpirationDateValid(month, year) {
|
|
72
|
+
return isValidMonth(month) && isValidYear(year) && isFutureOrPresentDate(month, year);
|
|
73
|
+
};
|
|
74
|
+
var isValid = function isValid(number) {
|
|
75
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
76
|
+
var cards = options.cards;
|
|
77
|
+
var rawNumber = removeNonNumbersCaracteres(number);
|
|
78
|
+
if (hasSomeInvalidDigit(number) || !hasCorrectLength(rawNumber)) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
var sum = sumNumber(rawNumber);
|
|
82
|
+
return checkSum(sum) && validateCardsWhenRequired(number, cards);
|
|
83
|
+
};
|
|
84
|
+
function validateCardsWhenRequired(number, cards) {
|
|
85
|
+
return !cards || !cards.length || validateCards(number, cards);
|
|
86
|
+
}
|
|
87
|
+
function validateCards(number, cards) {
|
|
88
|
+
return areCardsSupported(cards) && cards.map(function (c) {
|
|
89
|
+
return c.toLowerCase();
|
|
90
|
+
}).includes(getCreditCardNameByNumber(number).toLowerCase());
|
|
91
|
+
}
|
|
92
|
+
function hasCorrectLength(number) {
|
|
93
|
+
return number && number.length <= 19;
|
|
94
|
+
}
|
|
95
|
+
function removeNonNumbersCaracteres(number) {
|
|
96
|
+
return number.replace(/\D/g, '');
|
|
97
|
+
}
|
|
98
|
+
function hasSomeInvalidDigit(creditcardNumber) {
|
|
99
|
+
var invalidDigits = new RegExp('[^0-9- ]');
|
|
100
|
+
return invalidDigits.test(creditcardNumber);
|
|
101
|
+
}
|
|
102
|
+
function checkSum(sum) {
|
|
103
|
+
return sum > 0 && sum % 10 === 0;
|
|
104
|
+
}
|
|
105
|
+
function areCardsSupported(passedCards) {
|
|
106
|
+
var supportedCards = CARDS.map(function (c) {
|
|
107
|
+
return c.name.toLowerCase();
|
|
108
|
+
});
|
|
109
|
+
return passedCards.every(function (c) {
|
|
110
|
+
return supportedCards.includes(c.toLowerCase());
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
function findCreditCardObjectByNumber(number) {
|
|
114
|
+
if (!number) return {};
|
|
115
|
+
var numberOnly = number.replace(/[^\d]/g, '');
|
|
116
|
+
return CARDS.find(function (card) {
|
|
117
|
+
return card.bins.test(numberOnly) && card;
|
|
118
|
+
}) || {};
|
|
119
|
+
}
|
|
120
|
+
function getCreditCardCodeLengthByNumber(number) {
|
|
121
|
+
return findCreditCardObjectByNumber(number).codeLength || DEFAULT_CODE_LENGTH;
|
|
122
|
+
}
|
|
123
|
+
function isValidMonth(month) {
|
|
124
|
+
return !isNaN(month) && month >= 1 && month <= 12;
|
|
125
|
+
}
|
|
126
|
+
function isValidYear(year) {
|
|
127
|
+
return !isNaN(year) && isValidFullYear(formatFullYear(year));
|
|
128
|
+
}
|
|
129
|
+
function formatFullYear(year) {
|
|
130
|
+
if (year.length === 2) return dateRange(year);
|
|
131
|
+
return year.length === 4 ? year : 0;
|
|
132
|
+
}
|
|
133
|
+
function dateRange() {
|
|
134
|
+
var increaseYear = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
135
|
+
var year = parseInt(increaseYear);
|
|
136
|
+
var today = new Date();
|
|
137
|
+
return Math.floor(today.getFullYear() / MILLENNIUM) * MILLENNIUM + year;
|
|
138
|
+
}
|
|
139
|
+
function isValidFullYear(year) {
|
|
140
|
+
return year >= dateRange() && year <= dateRange(MILLENNIUM);
|
|
141
|
+
}
|
|
142
|
+
function isFutureOrPresentDate(month, year) {
|
|
143
|
+
var fullYear = formatFullYear(year);
|
|
144
|
+
var currentDate = new Date();
|
|
145
|
+
var expirationDate = new Date();
|
|
146
|
+
currentDate.setFullYear(currentDate.getFullYear(), currentDate.getMonth(), 1);
|
|
147
|
+
expirationDate.setFullYear(fullYear, month - 1, 1);
|
|
148
|
+
return currentDate <= expirationDate;
|
|
149
|
+
}
|
|
150
|
+
function sumNumber(number) {
|
|
151
|
+
var computed = [0, 2, 4, 6, 8, 1, 3, 5, 7, 9];
|
|
152
|
+
var sum = 0;
|
|
153
|
+
var digit = 0;
|
|
154
|
+
var i = number.length;
|
|
155
|
+
var even = true;
|
|
156
|
+
while (i--) {
|
|
157
|
+
digit = Number(number[i]);
|
|
158
|
+
sum += (even = !even) ? computed[digit] : digit;
|
|
159
|
+
}
|
|
160
|
+
return sum;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
exports.getCreditCardNameByNumber = getCreditCardNameByNumber;
|
|
164
|
+
exports.isExpirationDateValid = isExpirationDateValid;
|
|
165
|
+
exports.isSecurityCodeValid = isSecurityCodeValid;
|
|
166
|
+
exports.isValid = isValid;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "creditcard.js",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.46",
|
|
4
4
|
"description": "A simple library for credit-card validation in JavaScript",
|
|
5
5
|
"main": "dist/creditcard.js",
|
|
6
6
|
"files": [
|
|
@@ -50,6 +50,8 @@
|
|
|
50
50
|
"@commitlint/config-conventional": "^17.4.4",
|
|
51
51
|
"@commitlint/format": "^17.4.4",
|
|
52
52
|
"@release-it/conventional-changelog": "^4.3.0",
|
|
53
|
+
"@rollup/plugin-babel": "^6.0.4",
|
|
54
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
53
55
|
"babel-jest": "^29.4.3",
|
|
54
56
|
"contaazul-pinst": "^1.1.10",
|
|
55
57
|
"conventional-changelog": "^3.1.25",
|
|
@@ -67,9 +69,7 @@
|
|
|
67
69
|
"lint-staged": "^16.1.6",
|
|
68
70
|
"prettier": "^2.8.4",
|
|
69
71
|
"release-it": "^14.14.3",
|
|
70
|
-
"rollup": "^
|
|
71
|
-
"rollup-plugin-babel": "^4.4.0",
|
|
72
|
-
"rollup-plugin-terser": "^7.0.2",
|
|
72
|
+
"rollup": "^3.29.5",
|
|
73
73
|
"simple-git-hooks": "^2.13.1",
|
|
74
74
|
"static-server": "^2.2.1"
|
|
75
75
|
},
|
|
@@ -77,9 +77,9 @@
|
|
|
77
77
|
"access": "public",
|
|
78
78
|
"registry": "https://registry.npmjs.org/"
|
|
79
79
|
},
|
|
80
|
-
"packageManager": "yarn@4.
|
|
80
|
+
"packageManager": "yarn@4.12.0",
|
|
81
81
|
"selfEngines": {
|
|
82
|
-
"node": ">=
|
|
82
|
+
"node": ">=24.x",
|
|
83
83
|
"yarn": ">=4.x"
|
|
84
84
|
},
|
|
85
85
|
"homepage": "https://github.com/ContaAzul/creditcard.js",
|
|
@@ -95,5 +95,8 @@
|
|
|
95
95
|
"bugs": {
|
|
96
96
|
"url": "https://github.com/ContaAzul/creditcard.js/issues"
|
|
97
97
|
},
|
|
98
|
-
"license": "MIT"
|
|
98
|
+
"license": "MIT",
|
|
99
|
+
"resolutions": {
|
|
100
|
+
"serialize-javascript": "^7.0.1"
|
|
101
|
+
}
|
|
99
102
|
}
|