112 lines
4.4 KiB
JavaScript
112 lines
4.4 KiB
JavaScript
|
|
const { Service } = require('egg');
|
|||
|
|
|
|||
|
|
const { Op } = require('sequelize');
|
|||
|
|
|
|||
|
|
const sha256 = require("crypto-js/sha256");
|
|||
|
|
|
|||
|
|
const CryptoJS = require("crypto-js");
|
|||
|
|
|
|||
|
|
const KEY = CryptoJS.enc.Utf8.parse('BDQH');
|
|||
|
|
|
|||
|
|
class BaseService extends Service {
|
|||
|
|
shaForm = (body, salt) => {
|
|||
|
|
return sha256(sha256(body).toString() + salt).toString();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
encryptRequest = (body) => {
|
|||
|
|
return CryptoJS.AES.encrypt(body, KEY, {
|
|||
|
|
mode: CryptoJS.mode.ECB,
|
|||
|
|
padding: CryptoJS.pad.Pkcs7
|
|||
|
|
}).toString();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
decryptRequest = (body) => {
|
|||
|
|
return CryptoJS.AES.decrypt(body, KEY, {
|
|||
|
|
mode: CryptoJS.mode.ECB,
|
|||
|
|
padding: CryptoJS.pad.Pkcs7
|
|||
|
|
}).toString(CryptoJS.enc.Utf8);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// uid生成函数
|
|||
|
|
generateNumberString = () => {
|
|||
|
|
// 获取当前日期(年月日)
|
|||
|
|
const now = new Date();
|
|||
|
|
const year = String(now.getFullYear()).padStart(4, '0');
|
|||
|
|
const month = String(now.getMonth() + 1).padStart(2, '0'); // 月份从0开始,所以加1
|
|||
|
|
const date = String(now.getDate()).padStart(2, '0');
|
|||
|
|
const dateString = year + month + date;
|
|||
|
|
|
|||
|
|
// 获取当前时间戳的后四位
|
|||
|
|
const timestamp = String(Date.now()).slice(-4);
|
|||
|
|
|
|||
|
|
// 生成四位随机数字
|
|||
|
|
const randomDigits = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
|
|||
|
|
|
|||
|
|
// 组合成最终的16位数字字符串
|
|||
|
|
const fullNumberString = dateString + timestamp + randomDigits;
|
|||
|
|
|
|||
|
|
return fullNumberString;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 随机盐生成函数
|
|||
|
|
generateRandomString = () => {
|
|||
|
|
const lowerCaseLetters = 'abcdefghijklmnopqrstuvwxyz';
|
|||
|
|
const upperCaseLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|||
|
|
const numbers = '0123456789';
|
|||
|
|
|
|||
|
|
let result = '';
|
|||
|
|
|
|||
|
|
// 生成5位随机小写字母
|
|||
|
|
for (let i = 0; i < 5; i++) {
|
|||
|
|
const randomIndex = Math.floor(Math.random() * lowerCaseLetters.length);
|
|||
|
|
result += lowerCaseLetters[randomIndex];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 生成5位随机大写字母
|
|||
|
|
for (let i = 0; i < 5; i++) {
|
|||
|
|
const randomIndex = Math.floor(Math.random() * upperCaseLetters.length);
|
|||
|
|
result += upperCaseLetters[randomIndex];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 生成2位随机数字
|
|||
|
|
for (let i = 0; i < 2; i++) {
|
|||
|
|
const randomIndex = Math.floor(Math.random() * numbers.length);
|
|||
|
|
result += numbers[randomIndex];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 打乱整个字符串
|
|||
|
|
const characters = result.split('');
|
|||
|
|
for (let i = characters.length - 1; i > 0; i--) {
|
|||
|
|
const j = Math.floor(Math.random() * (i + 1));
|
|||
|
|
[characters[i], characters[j]] = [characters[j], characters[i]];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return characters.join('');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 全角字符转半角字符
|
|||
|
|
toHalfWidth = (str) => {
|
|||
|
|
// 全角字符到半角字符的映射表
|
|||
|
|
const fullWidthToHalfWidthMap = {
|
|||
|
|
'!': '!', '"': '"', '#': '#', '$': '$', '%': '%', '&': '&', ''': "'",
|
|||
|
|
'(': '(', ')': ')', '*': '*', '+': '+', ',': ',', '-': '-', '.': '.',
|
|||
|
|
'/': '/', ':': ':', ';': ';', '<': '<', '=': '=', '>': '>', '?': '?',
|
|||
|
|
'@': '@', 'A': 'A', 'B': 'B', 'C': 'C', 'D': 'D', 'E': 'E', 'F': 'F',
|
|||
|
|
'G': 'G', 'H': 'H', 'I': 'I', 'J': 'J', 'K': 'K', 'L': 'L', 'M': 'M',
|
|||
|
|
'N': 'N', 'O': 'O', 'P': 'P', 'Q': 'Q', 'R': 'R', 'S': 'S', 'T': 'T',
|
|||
|
|
'U': 'U', 'V': 'V', 'W': 'W', 'X': 'X', 'Y': 'Y', 'Z': 'Z', '[': '[',
|
|||
|
|
'\': '\\', ']': ']', '^': '^', '_': '_', '`': '`', 'a': 'a', 'b': 'b',
|
|||
|
|
'c': 'c', 'd': 'd', 'e': 'e', 'f': 'f', 'g': 'g', 'h': 'h', 'i': 'i',
|
|||
|
|
'j': 'j', 'k': 'k', 'l': 'l', 'm': 'm', 'n': 'n', 'o': 'o', 'p': 'p',
|
|||
|
|
'q': 'q', 'r': 'r', 's': 's', 't': 't', 'u': 'u', 'v': 'v', 'w': 'w',
|
|||
|
|
'x': 'x', 'y': 'y', 'z': 'z', '{': '{', '|': '|', '}': '}', '~': '~',
|
|||
|
|
'0': '0', '1': '1', '2': '2', '3': '3', '4': '4', '5': '5', '6': '6',
|
|||
|
|
'7': '7', '8': '8', '9': '9', ' ': ' ' // 全角空格到半角空格的映射
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 遍历输入字符串,将全角字符替换为半角字符
|
|||
|
|
return str.split('').map(char => fullWidthToHalfWidthMap[char] || char).join('');
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
module.exports = BaseService;
|