index.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. 'use strict';
  2. // MD5加密工具
  3. const crypto = require('crypto');
  4. // 使用crypto进行MD5加密
  5. const md5 = crypto.createHash('md5');
  6. /* 通用函数集合 */
  7. // UTC时间格式化成本地时间
  8. exports.formatUTC = UTCDateString => {
  9. if (!UTCDateString) {
  10. return '-';
  11. }
  12. // 格式化显示
  13. function formatFunc(str) {
  14. return str > 9 ? str : '0' + str;
  15. }
  16. // 这步是关键
  17. const date2 = new Date(UTCDateString);
  18. const year = date2.getFullYear();
  19. const mon = formatFunc(date2.getMonth() + 1);
  20. const day = formatFunc(date2.getDate());
  21. const hour = date2.getHours();
  22. const min = date2.getMinutes();
  23. const second = date2.getSeconds();
  24. const dateStr =
  25. year + '-' + mon + '-' + day + ' ' + hour + ':' + min + ':' + second;
  26. return dateStr;
  27. };
  28. // 生成8位数的uid
  29. exports.createNewUid = () => {
  30. /* 生成8位随机整数,不能有4位连续数字,不能有4位重复数字 */
  31. // 4位重复数字
  32. // let reg1 = /\d{4}/;
  33. const reg1 = /([\d])\1{3}/;
  34. // 4位连续数字
  35. const reg2 = /(0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)){3}|(?:0(?=9)|9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){3}/;
  36. // const numStr1 = '10122229';
  37. // const numStr2 = '78902100';
  38. // console.log(`reg1 is ${reg1.test(numStr1)}`);
  39. // console.log(`reg2 is ${reg2.test(numStr2)}`);
  40. // 生成uid(随机20次应该能有1次满足条件)
  41. let uid = null;
  42. for (let i = 0; i < 20; i++) {
  43. // 生成随机整数(范围11111111到19878711)
  44. uid = String(parseInt(Math.random() * 8767600) + 11111111);
  45. // console.log(`uid is ${uid}`)
  46. // const uid = "89016530";
  47. // console.log(`reg1 is ${reg1.test(uid)}`);
  48. // console.log(`reg2 is ${reg2.test(uid)}`);
  49. if (!reg1.test(uid) && !reg2.test(uid)) {
  50. // console.log(`uid is 1111`)
  51. return uid;
  52. }
  53. }
  54. };
  55. // 生成密码加密的盐slat(8位字符串)
  56. exports.saltPwd = () => {
  57. let str = '';
  58. const arr = [
  59. '0',
  60. '1',
  61. '2',
  62. '3',
  63. '4',
  64. '5',
  65. '6',
  66. '7',
  67. '8',
  68. '9',
  69. 'a',
  70. 'b',
  71. 'c',
  72. 'd',
  73. 'e',
  74. 'f',
  75. 'g',
  76. 'h',
  77. 'i',
  78. 'j',
  79. 'k',
  80. 'l',
  81. 'm',
  82. 'n',
  83. 'o',
  84. 'p',
  85. 'q',
  86. 'r',
  87. 's',
  88. 't',
  89. 'u',
  90. 'v',
  91. 'w',
  92. 'x',
  93. 'y',
  94. 'z',
  95. ];
  96. let pos = null;
  97. for (let i = 0; i < 8; i++) {
  98. pos = Math.round(Math.random() * (arr.length - 1));
  99. str += arr[pos];
  100. }
  101. return str;
  102. };
  103. // 生成随机字符串(数字(0-9),字母(a-z,A-Z))
  104. exports.randomWord = (randomFlag, min, max) => {
  105. let str = '';
  106. let range = min;
  107. const arr = [
  108. '0',
  109. '1',
  110. '2',
  111. '3',
  112. '4',
  113. '5',
  114. '6',
  115. '7',
  116. '8',
  117. '9',
  118. 'a',
  119. 'b',
  120. 'c',
  121. 'd',
  122. 'e',
  123. 'f',
  124. 'g',
  125. 'h',
  126. 'i',
  127. 'j',
  128. 'k',
  129. 'l',
  130. 'm',
  131. 'n',
  132. 'o',
  133. 'p',
  134. 'q',
  135. 'r',
  136. 's',
  137. 't',
  138. 'u',
  139. 'v',
  140. 'w',
  141. 'x',
  142. 'y',
  143. 'z',
  144. 'A',
  145. 'B',
  146. 'C',
  147. 'D',
  148. 'E',
  149. 'F',
  150. 'G',
  151. 'H',
  152. 'I',
  153. 'J',
  154. 'K',
  155. 'L',
  156. 'M',
  157. 'N',
  158. 'O',
  159. 'P',
  160. 'Q',
  161. 'R',
  162. 'S',
  163. 'T',
  164. 'U',
  165. 'V',
  166. 'W',
  167. 'X',
  168. 'Y',
  169. 'Z',
  170. ];
  171. // 随机产生
  172. if (randomFlag) {
  173. range = Math.round(Math.random() * (max - min)) + min;
  174. }
  175. let pos = null;
  176. for (let i = 0; i < range; i++) {
  177. pos = Math.round(Math.random() * (arr.length - 1));
  178. str += arr[pos];
  179. }
  180. return str;
  181. // 使用方法
  182. // 生成3-32位随机串:randomWord(true, 3, 32)
  183. // 生成43位随机串:randomWord(false, 43)
  184. };
  185. // 生成两数之间随机数
  186. exports.randomNums = (min, max) => {
  187. return Math.round(Math.random() * (max - min) + min);
  188. };
  189. // 客户端密码加密
  190. exports.saltPwdMd5 = (password, saltPwd) => {
  191. const md5 = crypto.createHash('md5');
  192. // 加了盐的客户端密码
  193. const saltPassword = password + ':' + saltPwd;
  194. // 加盐的密码再用MD5加密
  195. const saltPasswordMd5 = md5.update(saltPassword).digest('hex');
  196. return saltPasswordMd5;
  197. };
  198. exports.createToken = data => {
  199. // console.log(`data is ${JSON.stringify(data)}`);
  200. const { uid, app } = data;
  201. // 当前时间戳
  202. const created = Math.floor(Date.now() / 1000);
  203. const token = app.jwt.sign({ uid, created }, app.config.jwt.secret, {
  204. expiresIn: '30d',
  205. });
  206. return token;
  207. };
  208. exports.createAdminToken = data => {
  209. // console.log(`data is ${JSON.stringify(data)}`);
  210. const { id, role, app } = data;
  211. // 当前时间戳
  212. const created = Math.floor(Date.now() / 1000);
  213. const token = app.jwt.sign({ id, role, created }, app.config.jwt.secret, {
  214. expiresIn: '30d',
  215. });
  216. return token;
  217. };