@ivujs/i-utils 1.1.1

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.
Files changed (132) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +149 -0
  3. package/dist/cjs/ID-card/index.cjs +122 -0
  4. package/dist/cjs/array/index.cjs +465 -0
  5. package/dist/cjs/clipboard/index.cjs +135 -0
  6. package/dist/cjs/color/index.cjs +210 -0
  7. package/dist/cjs/constants/date.cjs +186 -0
  8. package/dist/cjs/constants/lang.cjs +13 -0
  9. package/dist/cjs/constants/math.cjs +13 -0
  10. package/dist/cjs/constants/regexp.cjs +57 -0
  11. package/dist/cjs/constants/sort.cjs +15 -0
  12. package/dist/cjs/cookie/index.cjs +71 -0
  13. package/dist/cjs/crypto/aes/aes.cjs +533 -0
  14. package/dist/cjs/crypto/aes/index.cjs +28 -0
  15. package/dist/cjs/crypto/base32/base32.cjs +385 -0
  16. package/dist/cjs/crypto/base32/index.cjs +44 -0
  17. package/dist/cjs/crypto/base64/base64.cjs +433 -0
  18. package/dist/cjs/crypto/base64/index.cjs +64 -0
  19. package/dist/cjs/crypto/des/des.cjs +1054 -0
  20. package/dist/cjs/crypto/des/index.cjs +30 -0
  21. package/dist/cjs/crypto/md5/index.cjs +25 -0
  22. package/dist/cjs/crypto/md5/md5.cjs +944 -0
  23. package/dist/cjs/crypto/sha/sha1/index.cjs +25 -0
  24. package/dist/cjs/crypto/sha/sha1/sha1.cjs +602 -0
  25. package/dist/cjs/crypto/sha/sha256/index.cjs +46 -0
  26. package/dist/cjs/crypto/sha/sha256/sha256.cjs +654 -0
  27. package/dist/cjs/crypto/sha/sha3/index.cjs +44 -0
  28. package/dist/cjs/crypto/sha/sha3/sha3.cjs +747 -0
  29. package/dist/cjs/crypto/sha/sha512/index.cjs +88 -0
  30. package/dist/cjs/crypto/sha/sha512/sha512.cjs +1186 -0
  31. package/dist/cjs/crypto/sm/lib/asn1.cjs +167 -0
  32. package/dist/cjs/crypto/sm/lib/ec.cjs +352 -0
  33. package/dist/cjs/crypto/sm/lib/jsbn.cjs +1633 -0
  34. package/dist/cjs/crypto/sm/lib/sm3.cjs +173 -0
  35. package/dist/cjs/crypto/sm/lib/utils.cjs +198 -0
  36. package/dist/cjs/crypto/sm/sm2/index.cjs +122 -0
  37. package/dist/cjs/crypto/sm/sm2/sm2.cjs +269 -0
  38. package/dist/cjs/crypto/sm/sm3/index.cjs +15 -0
  39. package/dist/cjs/crypto/sm/sm3/sm3.cjs +103 -0
  40. package/dist/cjs/crypto/sm/sm4/index.cjs +28 -0
  41. package/dist/cjs/crypto/sm/sm4/sm4.cjs +362 -0
  42. package/dist/cjs/crypto/tea/index.cjs +26 -0
  43. package/dist/cjs/crypto/tea/tea.cjs +215 -0
  44. package/dist/cjs/date/index.cjs +1349 -0
  45. package/dist/cjs/desensitized/index.cjs +74 -0
  46. package/dist/cjs/device/index.cjs +159 -0
  47. package/dist/cjs/dom/index.cjs +176 -0
  48. package/dist/cjs/file/index.cjs +339 -0
  49. package/dist/cjs/function/index.cjs +67 -0
  50. package/dist/cjs/id/index.cjs +46 -0
  51. package/dist/cjs/index.cjs +399 -0
  52. package/dist/cjs/keycode/index.cjs +142 -0
  53. package/dist/cjs/math/index.cjs +284 -0
  54. package/dist/cjs/number/index.cjs +14 -0
  55. package/dist/cjs/object/index.cjs +216 -0
  56. package/dist/cjs/pagination/index.cjs +140 -0
  57. package/dist/cjs/random/index.cjs +25 -0
  58. package/dist/cjs/regexp/index.cjs +109 -0
  59. package/dist/cjs/storage/index.cjs +11 -0
  60. package/dist/cjs/storage/localStorage.cjs +40 -0
  61. package/dist/cjs/storage/sessionStorage.cjs +40 -0
  62. package/dist/cjs/string/index.cjs +338 -0
  63. package/dist/cjs/url/index.cjs +279 -0
  64. package/dist/cjs/validate/index.cjs +487 -0
  65. package/dist/cjs/weapp/index.cjs +151 -0
  66. package/dist/es/ID-card/index.mjs +116 -0
  67. package/dist/es/array/index.mjs +437 -0
  68. package/dist/es/clipboard/index.mjs +129 -0
  69. package/dist/es/color/index.mjs +200 -0
  70. package/dist/es/constants/date.mjs +184 -0
  71. package/dist/es/constants/lang.mjs +11 -0
  72. package/dist/es/constants/math.mjs +11 -0
  73. package/dist/es/constants/regexp.mjs +55 -0
  74. package/dist/es/constants/sort.mjs +13 -0
  75. package/dist/es/cookie/index.mjs +65 -0
  76. package/dist/es/crypto/aes/aes.mjs +529 -0
  77. package/dist/es/crypto/aes/index.mjs +25 -0
  78. package/dist/es/crypto/base32/base32.mjs +381 -0
  79. package/dist/es/crypto/base32/index.mjs +39 -0
  80. package/dist/es/crypto/base64/base64.mjs +427 -0
  81. package/dist/es/crypto/base64/index.mjs +57 -0
  82. package/dist/es/crypto/des/des.mjs +1050 -0
  83. package/dist/es/crypto/des/index.mjs +27 -0
  84. package/dist/es/crypto/md5/index.mjs +22 -0
  85. package/dist/es/crypto/md5/md5.mjs +941 -0
  86. package/dist/es/crypto/sha/sha1/index.mjs +22 -0
  87. package/dist/es/crypto/sha/sha1/sha1.mjs +599 -0
  88. package/dist/es/crypto/sha/sha256/index.mjs +41 -0
  89. package/dist/es/crypto/sha/sha256/sha256.mjs +649 -0
  90. package/dist/es/crypto/sha/sha3/index.mjs +39 -0
  91. package/dist/es/crypto/sha/sha3/sha3.mjs +742 -0
  92. package/dist/es/crypto/sha/sha512/index.mjs +79 -0
  93. package/dist/es/crypto/sha/sha512/sha512.mjs +1177 -0
  94. package/dist/es/crypto/sm/lib/asn1.mjs +164 -0
  95. package/dist/es/crypto/sm/lib/ec.mjs +349 -0
  96. package/dist/es/crypto/sm/lib/jsbn.mjs +1630 -0
  97. package/dist/es/crypto/sm/lib/sm3.mjs +170 -0
  98. package/dist/es/crypto/sm/lib/utils.mjs +186 -0
  99. package/dist/es/crypto/sm/sm2/index.mjs +111 -0
  100. package/dist/es/crypto/sm/sm2/sm2.mjs +258 -0
  101. package/dist/es/crypto/sm/sm3/index.mjs +13 -0
  102. package/dist/es/crypto/sm/sm3/sm3.mjs +99 -0
  103. package/dist/es/crypto/sm/sm4/index.mjs +25 -0
  104. package/dist/es/crypto/sm/sm4/sm4.mjs +359 -0
  105. package/dist/es/crypto/tea/index.mjs +23 -0
  106. package/dist/es/crypto/tea/tea.mjs +211 -0
  107. package/dist/es/date/index.mjs +1262 -0
  108. package/dist/es/desensitized/index.mjs +69 -0
  109. package/dist/es/device/index.mjs +145 -0
  110. package/dist/es/dom/index.mjs +164 -0
  111. package/dist/es/file/index.mjs +323 -0
  112. package/dist/es/function/index.mjs +63 -0
  113. package/dist/es/id/index.mjs +43 -0
  114. package/dist/es/index.mjs +59 -0
  115. package/dist/es/keycode/index.mjs +139 -0
  116. package/dist/es/math/index.mjs +274 -0
  117. package/dist/es/number/index.mjs +12 -0
  118. package/dist/es/object/index.mjs +203 -0
  119. package/dist/es/pagination/index.mjs +134 -0
  120. package/dist/es/random/index.mjs +22 -0
  121. package/dist/es/regexp/index.mjs +98 -0
  122. package/dist/es/storage/index.mjs +9 -0
  123. package/dist/es/storage/localStorage.mjs +35 -0
  124. package/dist/es/storage/sessionStorage.mjs +35 -0
  125. package/dist/es/string/index.mjs +321 -0
  126. package/dist/es/url/index.mjs +261 -0
  127. package/dist/es/validate/index.mjs +451 -0
  128. package/dist/es/weapp/index.mjs +140 -0
  129. package/dist/lib/index.full.esm.js +15825 -0
  130. package/dist/lib/index.full.esm.min.js +58 -0
  131. package/dist/lib/index.full.umd.js +16179 -0
  132. package/package.json +54 -0
@@ -0,0 +1,339 @@
1
+ 'use strict';
2
+
3
+ var index = require('../validate/index.cjs');
4
+
5
+ /* 文件信息处理 */
6
+ /**
7
+ * 格式化文件大小自动转为 B,KB,MB,GB
8
+ * @param {Number} size 文件的大小,单位byte字节
9
+ * @returns {String} 返回格式化后的字符串
10
+ */
11
+ function formatFileSize(size) {
12
+ if (index.isEmpty(size)) return "0B";
13
+ if (size < 1024) {
14
+ return size + "B";
15
+ } else if (size < 1024 * 1024) {
16
+ return (size / 1024).toFixed(2) + "KB";
17
+ } else if (size < 1024 * 1024 * 1024) {
18
+ return (size / (1024 * 1024)).toFixed(2) + "MB";
19
+ } else {
20
+ return (size / (1024 * 1024 * 1024)).toFixed(2) + "GB";
21
+ }
22
+ }
23
+
24
+ /**
25
+ * 获得文件名称
26
+ * @param {String} fileName 文件的全名称,例如:测试图片.jpg
27
+ * @returns {String} 返回文件的名称
28
+ */
29
+ function getFileName(fileName) {
30
+ if (index.isEmpty(fileName)) return;
31
+ return fileName.substring(0, fileName.lastIndexOf("."));
32
+ }
33
+
34
+ /**
35
+ * 获得文件后缀名
36
+ * @param {String} value 文件地址路径或者文件全名称,例如:http://xxx.com/mytest.jpg,测试图片.jpg
37
+ * @returns {String} 返回文件后缀名
38
+ */
39
+ function getFileSuffix(value) {
40
+ if (index.isEmpty(value)) return;
41
+ return value.substring(value.lastIndexOf(".") + 1).toLowerCase();
42
+ }
43
+
44
+ /* 文件转换 */
45
+ /**
46
+ * file转blob
47
+ * @param {File} file file文件
48
+ * @returns {Promise} 返回Promise的blob
49
+ */
50
+ function fileToBlob(file) {
51
+ return new Promise((resolve, reject) => {
52
+ // 读取解析文件
53
+ let reader = new FileReader();
54
+ reader.readAsArrayBuffer(file);
55
+
56
+ // 加载成功
57
+ reader.onload = (e) => {
58
+ const blob = new Blob([e.target.result], { type: file.type });
59
+ resolve(blob);
60
+ };
61
+ // 加载失败
62
+ reader.onerror = function (err) {
63
+ console.error(err);
64
+ reject(err);
65
+ };
66
+ });
67
+ }
68
+
69
+ /**
70
+ * file转base64
71
+ * @param {File} file file文件
72
+ * @returns {Promise} 返回Promise的base64
73
+ */
74
+ function fileToBase64(file) {
75
+ return new Promise((resolve, reject) => {
76
+ // 读取解析文件
77
+ let reader = new FileReader();
78
+ reader.readAsDataURL(file);
79
+
80
+ // 加载成功
81
+ reader.onload = function (e) {
82
+ resolve(e.target.result);
83
+ };
84
+ // 加载失败
85
+ reader.onerror = function (err) {
86
+ console.error(err);
87
+ reject(err);
88
+ };
89
+ });
90
+ }
91
+
92
+ /**
93
+ * file转url
94
+ * @description 适用于本地上传图片并预览,需要注意 URL.revokeObjectURL(file) 内存释放
95
+ * @param {File} file file文件
96
+ * @returns {Promise} 返回Promise的url
97
+ */
98
+ function fileToUrl(file) {
99
+ return new Promise((resolve, reject) => {
100
+ try {
101
+ resolve(URL.createObjectURL(file));
102
+ } catch (err) {
103
+ // 捕捉异常
104
+ console.error(err);
105
+ URL.revokeObjectURL(file);
106
+ reject(err);
107
+ }
108
+ });
109
+ }
110
+
111
+ /**
112
+ * url赚file
113
+ * @param {String} url url地址
114
+ * @returns {Promise} 返回Promise的file
115
+ */
116
+ function urlToFile(url) {
117
+ return new Promise(async (resolve, reject) => {
118
+ try {
119
+ let res = await window.fetch(url);
120
+ if (res.status === 200) {
121
+ let blob = await res.blob();
122
+ let file = await blobToFile(blob);
123
+ resolve(file);
124
+ }
125
+ } catch (err) {
126
+ console.error(err);
127
+ reject(err);
128
+ }
129
+ });
130
+ }
131
+
132
+ /**
133
+ * blob转file
134
+ * @param {Blob} blob blob数据
135
+ * @param {String} fileName 文件名称,默认以时间戳命名
136
+ * @returns {Promise} 返回Promise的file
137
+ */
138
+ function blobToFile(blob, fileName = Date.now()) {
139
+ return new Promise((resolve, reject) => {
140
+ try {
141
+ const mime = blob.type;
142
+ const size = blob.size;
143
+ const fileSuffix = mime.split("/")[1];
144
+ const file = new File([blob], `${Date.now()}.${fileSuffix}`, {
145
+ type: mime,
146
+ size: size,
147
+ name: `${fileName}.${fileSuffix}`,
148
+ lastModified: Date.now(),
149
+ lastModifiedDate: new Date(),
150
+ });
151
+ resolve(file);
152
+ } catch (err) {
153
+ // 捕捉异常
154
+ console.error(err);
155
+ reject(err);
156
+ }
157
+ });
158
+ }
159
+
160
+ /**
161
+ * blob转文本
162
+ * @param {Blob} blob blob数据
163
+ * @returns {Promise} 返回Promise的文本
164
+ */
165
+ function blobToText(blob) {
166
+ return new Promise((resolve, reject) => {
167
+ const reader = new FileReader();
168
+ reader.onload = function (event) {
169
+ resolve(event.target.result);
170
+ };
171
+ reader.onerror = function (error) {
172
+ reject(error);
173
+ };
174
+ reader.readAsText(blob);
175
+ });
176
+ }
177
+
178
+ /**
179
+ * blob转base64
180
+ * @param {Blob} blob blob数据
181
+ * @returns {Promise} 返回Promise的base64
182
+ */
183
+ function blobToBase64(blob) {
184
+ return new Promise((resolve, reject) => {
185
+ // 读取解析文件
186
+ let reader = new FileReader();
187
+ reader.readAsDataURL(blob);
188
+
189
+ // 加载成功
190
+ reader.onload = function (e) {
191
+ resolve(e.target.result);
192
+ };
193
+ // 加载失败
194
+ reader.onerror = function (err) {
195
+ console.error(err);
196
+ reject(err);
197
+ };
198
+ });
199
+ }
200
+
201
+ /**
202
+ * base64转file
203
+ * @param {String} base64 base64数据
204
+ * @param {String} fileName 文件名称,默认以时间戳命名
205
+ * @returns {Promise} 返回Promise的file
206
+ */
207
+ function base64ToFile(base64, fileName = Date.now()) {
208
+ return new Promise((resolve, reject) => {
209
+ try {
210
+ const arr = base64.split(",");
211
+ const mime = arr[0].match(/:(.*?);/)[1];
212
+ const fileSuffix = mime.split("/")[1];
213
+ const bstr = window.atob(arr[1]);
214
+ let n = bstr.length;
215
+ const u8arr = new Uint8Array(n);
216
+
217
+ while (n--) {
218
+ u8arr[n] = bstr.charCodeAt(n);
219
+ }
220
+ resolve(new File([u8arr], `${fileName}.${fileSuffix}`, { type: mime }));
221
+ } catch (err) {
222
+ // 捕捉异常
223
+ console.error(err);
224
+ reject(err);
225
+ }
226
+ });
227
+ }
228
+
229
+ /**
230
+ * base64转成blob
231
+ * @param {String} base64 base64数据
232
+ * @returns {Promise} 返回Promise的blob
233
+ */
234
+ function base64ToBlob(base64) {
235
+ return new Promise((resolve, reject) => {
236
+ try {
237
+ const arr = base64.split(",");
238
+ const mime = arr[0].match(/:(.*?);/)[1];
239
+ const bstr = window.atob(arr[1]);
240
+ let n = bstr.length;
241
+ const u8arr = new Uint8Array(n);
242
+
243
+ while (n--) {
244
+ u8arr[n] = bstr.charCodeAt(n);
245
+ }
246
+ resolve(new Blob([u8arr], { type: mime }));
247
+ } catch (err) {
248
+ // 捕捉异常
249
+ console.error(err);
250
+ reject(err);
251
+ }
252
+ });
253
+ }
254
+
255
+ /**
256
+ * 图片url转base64
257
+ * @param {String} imgUrl 图片url地址
258
+ * @returns {Promise} 返回Promise的base64
259
+ */
260
+ function urlToBase64(imgUrl) {
261
+ return new Promise((resolve, reject) => {
262
+ // 设置图片
263
+ const img = new Image();
264
+ img.src = imgUrl;
265
+
266
+ // 加载成功
267
+ img.onload = function () {
268
+ // 画图
269
+ const canvas = document.createElement("canvas");
270
+ const context = canvas.getContext("2d");
271
+ canvas.width = img.width;
272
+ canvas.height = img.height;
273
+ context.drawImage(img, 0, 0, img.width, img.height);
274
+ // 转为base64
275
+ const base64 = canvas.toDataURL("image/png");
276
+ resolve(base64);
277
+ };
278
+ // 加载失败
279
+ img.onerror = function (err) {
280
+ console.error(err);
281
+ reject(err);
282
+ };
283
+ });
284
+ }
285
+
286
+ /* 下载文件 */
287
+ /**
288
+ * 下载blob格式的文件
289
+ * @param {Blob} blob blob数据
290
+ * @param {String} fileName 下载的文件名,不写后缀名则默认为原文件类型
291
+ */
292
+ function downloadBlobFile(blob, fileName) {
293
+ try {
294
+ const objUrl = window.URL.createObjectURL(blob);
295
+ const link = window.document.createElement("a");
296
+ link.download = fileName;
297
+ link.href = objUrl;
298
+ link.click();
299
+ URL.revokeObjectURL(objUrl);
300
+ } catch (error) {
301
+ console.error(error);
302
+ }
303
+ }
304
+
305
+ /**
306
+ * 通过文件url地址下载
307
+ * @param {String} fileUrl url文件地址
308
+ * @param {String} fileName 下载的文件名,不写后缀名则默认为原文件类型
309
+ */
310
+ function downloadFileUrl(fileUrl, fileName) {
311
+ try {
312
+ const link = window.document.createElement("a");
313
+ link.download = fileName;
314
+ link.href = fileUrl;
315
+ // 生成节点点击
316
+ window.document.body.appendChild(link);
317
+ link.click();
318
+ // 点击后移除节点
319
+ window.document.body.removeChild(link);
320
+ } catch (error) {
321
+ console.error(error);
322
+ }
323
+ }
324
+
325
+ exports.base64ToBlob = base64ToBlob;
326
+ exports.base64ToFile = base64ToFile;
327
+ exports.blobToBase64 = blobToBase64;
328
+ exports.blobToFile = blobToFile;
329
+ exports.blobToText = blobToText;
330
+ exports.downloadBlobFile = downloadBlobFile;
331
+ exports.downloadFileUrl = downloadFileUrl;
332
+ exports.fileToBase64 = fileToBase64;
333
+ exports.fileToBlob = fileToBlob;
334
+ exports.fileToUrl = fileToUrl;
335
+ exports.formatFileSize = formatFileSize;
336
+ exports.getFileName = getFileName;
337
+ exports.getFileSuffix = getFileSuffix;
338
+ exports.urlToBase64 = urlToBase64;
339
+ exports.urlToFile = urlToFile;
@@ -0,0 +1,67 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * 防抖函数
5
+ * @description 事件执行后,在延迟时间内如果再次执行,会清空定时器重新延迟执行,举例:用户在输入框进行输入搜索,最终是会获取到最后一次输入,节约请求资源
6
+ * @param {Function} fn 目标函数
7
+ * @param {Number} delay 延迟时间,单位毫秒,默认 1*1000 毫秒
8
+ * @param {Boolean} immediate 是否立即执行,默认true
9
+ * @returns {Function} 返回function()
10
+ */
11
+ function debounce(fn, delay = 1 * 1000, immediate = true) {
12
+ let timer;
13
+ return function () {
14
+ const _args = arguments;
15
+ // 先关闭定时器
16
+ if (timer) clearTimeout(timer);
17
+ // 立即执行判断
18
+ if (immediate) {
19
+ // 如果需要立即执行
20
+ // 开启新定时器防止短时间内再次触发
21
+ const canExecute = !timer;
22
+ timer = setTimeout(function () {
23
+ timer = null;
24
+ }, delay);
25
+ if (canExecute) fn.apply(this, _args);
26
+ } else {
27
+ // 如果不需要立即执行
28
+ // 每次触发开启新定时器即可
29
+ timer = setTimeout(function () {
30
+ fn.apply(this, _args);
31
+ }, delay);
32
+ }
33
+ };
34
+ }
35
+
36
+ /**
37
+ * 节流函数
38
+ * @description 高频触发时,在指定时间间隔内只执行一次,举例:监听页面滚动,不会频繁触发,只会在固定时间内获取一次
39
+ * @param {Function} fn 目标函数
40
+ * @param {Number} interval 时间间隔,单位毫秒,默认1*1000毫秒
41
+ * @returns {Function} 返回function()
42
+ */
43
+ function throttle(fn, interval = 1 * 1000) {
44
+ let timer;
45
+ return function () {
46
+ const _args = arguments;
47
+ // 有定时器则返回
48
+ if (timer) return;
49
+ timer = setTimeout(() => {
50
+ timer = null;
51
+ fn.apply(this, _args);
52
+ }, interval);
53
+ };
54
+ }
55
+
56
+ /**
57
+ * 睡眠延迟执行
58
+ * @description 需要配合 async/await 来达到延迟效果
59
+ * @param {Number} delay 延迟时间,单位毫秒,默认1*1000毫秒
60
+ */
61
+ function sleep(delay = 1 * 1000) {
62
+ return new Promise((resolve) => setTimeout(resolve, delay));
63
+ }
64
+
65
+ exports.debounce = debounce;
66
+ exports.sleep = sleep;
67
+ exports.throttle = throttle;
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * 生成UUID
5
+ * @param {Number} len 生成的长度,默认32位
6
+ * @param {Number} radix 进制数,默认16进制
7
+ * @example
8
+ * getUUID() // 输出:0a559343dbbf0e7e6c1de90163e7aa0a
9
+ * @returns {String} 返回字符串
10
+ */
11
+ function getUUID(len = 32, radix = 16) {
12
+ const CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
13
+ let uuid = [],
14
+ i;
15
+ radix = radix || CHARS.length;
16
+ if (len) {
17
+ for (i = 0; i < len; i++) uuid[i] = CHARS[0 | (Math.random() * radix)];
18
+ } else {
19
+ let r;
20
+ uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-";
21
+ uuid[14] = "4";
22
+ for (i = 0; i < 36; i++) {
23
+ if (!uuid[i]) {
24
+ r = 0 | (Math.random() * 16);
25
+ uuid[i] = CHARS[i === 19 ? (r & 0x3) | 0x8 : r];
26
+ }
27
+ }
28
+ }
29
+ return uuid.join("");
30
+ }
31
+
32
+ /**
33
+ * 生成GUID
34
+ * @example
35
+ * getGUID() // 输出:275ec770-0853-6767-4875-7b270220ce9c
36
+ * @returns {String} 返回字符串
37
+ */
38
+ function getGUID() {
39
+ let s4 = function () {
40
+ return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
41
+ };
42
+ return s4() + s4() + "-" + s4() + "-" + s4() + "-" + s4() + "-" + s4() + s4() + s4();
43
+ }
44
+
45
+ exports.getGUID = getGUID;
46
+ exports.getUUID = getUUID;