util-helpers 4.8.0 → 4.8.3

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.
@@ -3,27 +3,6 @@ import convertToString from './utils/convertToString'; // 基础规则,由18
3
3
  var baseReg = /^[\dA-HJ-NPQRTUWXY]{2}\d{6}[\dA-HJ-NPQRTUWXY]{10}$/; // 基础字符组成
4
4
 
5
5
  var baseCodeArr = '0123456789ABCDEFGHJKLMNPQRTUWXY'.split('');
6
- /**
7
- * 获取字符位置
8
- *
9
- * @private
10
- * @param {string} code 字符
11
- * @returns {number} 字符所在基础字符的位置
12
- */
13
-
14
- function getBaseCodeIndex(code) {
15
- var ret;
16
- baseCodeArr.some(function (item, index) {
17
- if (item === code) {
18
- ret = index;
19
- return true;
20
- }
21
-
22
- return false;
23
- }); // @ts-ignore
24
-
25
- return ret;
26
- }
27
6
  /**
28
7
  * 计算校验码
29
8
  *
@@ -33,24 +12,28 @@ function getBaseCodeIndex(code) {
33
12
  * @returns {string} 校验码
34
13
  */
35
14
 
36
-
37
15
  function sumCheckCode(preCode) {
38
- // const preCodeArr = preCode.split('');
39
16
  var total = 0; // 计算字符位置对应序号和加权因子的乘积,总和
40
17
 
41
- for (var i = 0; i < 17; i++) {
18
+ var _loop = function _loop(i) {
42
19
  // 字符位置对应的基础编码序号
43
- var index = getBaseCodeIndex(preCode[i]); // 加权因子
20
+ var index = baseCodeArr.findIndex(function (item) {
21
+ return item === preCode[i];
22
+ }); // 加权因子
44
23
 
45
24
  var wf = Math.pow(3, i) % 31; // 计算序号和加权因子的乘积,并计算级数之和
46
25
 
47
26
  total += index * wf;
27
+ };
28
+
29
+ for (var i = 0; i < 17; i++) {
30
+ _loop(i);
48
31
  } // 计算整数求余函数MOD
49
32
 
50
33
 
51
34
  var remainder = total % 31; // 校验码字符值序号
52
35
 
53
- var checkCodeIndex = 31 - remainder;
36
+ var checkCodeIndex = remainder !== 0 ? 31 - remainder : 0;
54
37
  return baseCodeArr[checkCodeIndex];
55
38
  }
56
39
  /**
package/esm/isUrl.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import convertToString from './utils/convertToString'; // url正则
2
2
 
3
- var reg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;
3
+ var reg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\*\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;
4
4
  /**
5
5
  * 检测值是否为url
6
6
  *
package/lib/isBankCard.js CHANGED
@@ -13,6 +13,25 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
13
13
  var reg = /^[1-9]\d{9,20}$/; // 8~30位数字
14
14
 
15
15
  var regLoose = /^\d{8,30}$/;
16
+ /**
17
+ * luhn 计算校验位
18
+ * @private
19
+ * @param {string} numStr 银行卡前面数字
20
+ * @returns {number}
21
+ */
22
+
23
+ function sumCheckCode(numStr) {
24
+ var numArr = (numStr + '').replace(/\D/g, '').split('').reverse();
25
+ var sum = 0;
26
+
27
+ for (var i = 0; i < numArr.length; i++) {
28
+ var currNum = parseInt(numArr[i]);
29
+ sum += i % 2 === 0 ? currNum * 2 - (currNum > 4 ? 9 : 0) : currNum;
30
+ }
31
+
32
+ var mod = sum % 10;
33
+ return mod !== 0 ? 10 - mod : 0;
34
+ }
16
35
  /**
17
36
  * 检测值是否为银行卡号。正常模式(非0开头,10~21位数字)宽松模式(8~30位数字)
18
37
  *
@@ -23,6 +42,7 @@ var regLoose = /^\d{8,30}$/;
23
42
  * @param {*} value 要检测的值
24
43
  * @param {Object} [options] 配置项
25
44
  * @param {boolean} [options.loose=false] 宽松模式,8~30位数字
45
+ * @param {boolean} [options.luhn=false] 使用 Luhn 算法校验校验码
26
46
  * @returns {boolean} 值是否为银行卡号
27
47
  * @example
28
48
  *
@@ -40,18 +60,24 @@ var regLoose = /^\d{8,30}$/;
40
60
  *
41
61
  */
42
62
 
63
+
43
64
  function isBankCard(value) {
44
65
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
45
66
  _ref$loose = _ref.loose,
46
- loose = _ref$loose === void 0 ? false : _ref$loose;
67
+ loose = _ref$loose === void 0 ? false : _ref$loose,
68
+ _ref$luhn = _ref.luhn,
69
+ luhn = _ref$luhn === void 0 ? false : _ref$luhn;
47
70
 
48
71
  var valueStr = (0, _convertToString["default"])(value);
72
+ var validateResult = loose ? regLoose.test(valueStr) : reg.test(valueStr);
49
73
 
50
- if (loose) {
51
- return regLoose.test(valueStr);
74
+ if (validateResult && luhn) {
75
+ var precode = valueStr.substring(0, valueStr.length - 1);
76
+ var checkCode = valueStr[valueStr.length - 1];
77
+ return checkCode === String(sumCheckCode(precode));
52
78
  }
53
79
 
54
- return reg.test(valueStr);
80
+ return validateResult;
55
81
  }
56
82
 
57
83
  var _default = isBankCard;
@@ -13,27 +13,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
13
13
  var baseReg = /^[\dA-HJ-NPQRTUWXY]{2}\d{6}[\dA-HJ-NPQRTUWXY]{10}$/; // 基础字符组成
14
14
 
15
15
  var baseCodeArr = '0123456789ABCDEFGHJKLMNPQRTUWXY'.split('');
16
- /**
17
- * 获取字符位置
18
- *
19
- * @private
20
- * @param {string} code 字符
21
- * @returns {number} 字符所在基础字符的位置
22
- */
23
-
24
- function getBaseCodeIndex(code) {
25
- var ret;
26
- baseCodeArr.some(function (item, index) {
27
- if (item === code) {
28
- ret = index;
29
- return true;
30
- }
31
-
32
- return false;
33
- }); // @ts-ignore
34
-
35
- return ret;
36
- }
37
16
  /**
38
17
  * 计算校验码
39
18
  *
@@ -43,24 +22,28 @@ function getBaseCodeIndex(code) {
43
22
  * @returns {string} 校验码
44
23
  */
45
24
 
46
-
47
25
  function sumCheckCode(preCode) {
48
- // const preCodeArr = preCode.split('');
49
26
  var total = 0; // 计算字符位置对应序号和加权因子的乘积,总和
50
27
 
51
- for (var i = 0; i < 17; i++) {
28
+ var _loop = function _loop(i) {
52
29
  // 字符位置对应的基础编码序号
53
- var index = getBaseCodeIndex(preCode[i]); // 加权因子
30
+ var index = baseCodeArr.findIndex(function (item) {
31
+ return item === preCode[i];
32
+ }); // 加权因子
54
33
 
55
34
  var wf = Math.pow(3, i) % 31; // 计算序号和加权因子的乘积,并计算级数之和
56
35
 
57
36
  total += index * wf;
37
+ };
38
+
39
+ for (var i = 0; i < 17; i++) {
40
+ _loop(i);
58
41
  } // 计算整数求余函数MOD
59
42
 
60
43
 
61
44
  var remainder = total % 31; // 校验码字符值序号
62
45
 
63
- var checkCodeIndex = 31 - remainder;
46
+ var checkCodeIndex = remainder !== 0 ? 31 - remainder : 0;
64
47
  return baseCodeArr[checkCodeIndex];
65
48
  }
66
49
  /**
package/lib/isUrl.js CHANGED
@@ -10,7 +10,7 @@ var _convertToString = _interopRequireDefault(require("./utils/convertToString")
10
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
11
11
 
12
12
  // url正则
13
- var reg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;
13
+ var reg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\*\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;
14
14
  /**
15
15
  * 检测值是否为url
16
16
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "util-helpers",
3
- "version": "4.8.0",
3
+ "version": "4.8.3",
4
4
  "description": "一个基于业务场景的工具方法库",
5
5
  "main": "lib/index.js",
6
6
  "module": "esm/index.js",
@@ -9,6 +9,7 @@ export default isBankCard;
9
9
  * @param {*} value 要检测的值
10
10
  * @param {Object} [options] 配置项
11
11
  * @param {boolean} [options.loose=false] 宽松模式,8~30位数字
12
+ * @param {boolean} [options.luhn=false] 使用 Luhn 算法校验校验码
12
13
  * @returns {boolean} 值是否为银行卡号
13
14
  * @example
14
15
  *
@@ -25,6 +26,7 @@ export default isBankCard;
25
26
  * // => true
26
27
  *
27
28
  */
28
- declare function isBankCard(value: any, { loose }?: {
29
+ declare function isBankCard(value: any, { loose, luhn }?: {
29
30
  loose?: boolean | undefined;
31
+ luhn?: boolean | undefined;
30
32
  } | undefined): boolean;