90 lines
2.3 KiB
JavaScript
90 lines
2.3 KiB
JavaScript
/* 基础小工具,可通用于服务端和用户端
|
||
*/
|
||
|
||
module.exports = {
|
||
sleep: (ms) => new Promise((resolve, reject) => setTimeout(resolve, ms)),
|
||
|
||
parseJsonPossible(value) {
|
||
try {
|
||
return JSON.parse(value)
|
||
} catch (e) {
|
||
return value
|
||
}
|
||
},
|
||
|
||
sortAndFilterJson({ fields, entity, exclude = [] } = {}) {
|
||
const newEntity = {}
|
||
for (let key of Object.keys(fields).sort()) {
|
||
if (typeof (entity[key] !== 'undefined') && !Number.isNaN(entity[key]) && entity[key] !== Infinity) {
|
||
newEntity[key] = entity[key]
|
||
}
|
||
}
|
||
for (let exkey of exclude) {
|
||
delete newEntity[exkey]
|
||
}
|
||
return JSON.stringify(newEntity)
|
||
},
|
||
|
||
name2port(name='') {
|
||
let port = name.toLowerCase()
|
||
.replace(/[abc]/g, 2)
|
||
.replace(/[def]/g, 3)
|
||
.replace(/[ghi]/g, 4)
|
||
.replace(/[jkl]/g, 5)
|
||
.replace(/[mno]/g, 6)
|
||
.replace(/[pqrs]/g, 7)
|
||
.replace(/[tuv]/g, 8)
|
||
.replace(/[wxyz]/g, 9)
|
||
return parseInt(port)
|
||
},
|
||
|
||
/**
|
||
* 用户编号转邀请码
|
||
*
|
||
* @static
|
||
* @param {*} aiid
|
||
* @return {*}
|
||
* @memberof TICrypto
|
||
*/
|
||
aiid2regcode(aiid) {
|
||
const alphabet = 'e5fcdg3hqa4b1n0pij2rstuv67mwx89klyz'
|
||
const base = 16367
|
||
let num = (aiid + base) * (base - alphabet.length)
|
||
let code = ''
|
||
let mod
|
||
while (num > 0) {
|
||
mod = num % alphabet.length
|
||
num = (num - mod) / alphabet.length
|
||
code = code + alphabet[mod] // 倒序存放
|
||
}
|
||
return code
|
||
},
|
||
|
||
/**
|
||
* 邀请码转用户编号
|
||
*
|
||
* @static
|
||
* @param {*} code
|
||
* @return {*}
|
||
* @memberof TICrypto
|
||
*/
|
||
regcode2aiid(code) {
|
||
if (typeof code === 'string' && /^[a-zA-Z0-9]+$/.test(code)) {
|
||
const alphabet = 'e5fcdg3hqa4b1n0pij2rstuv67mwx89klyz'
|
||
const base = 16367
|
||
code = code.toLowerCase()
|
||
let len = code.length
|
||
let num = 0
|
||
for (let i = 0; i < len; i++) {
|
||
num += alphabet.indexOf(code[i]) * Math.pow(alphabet.length, i)
|
||
}
|
||
let aiid = num / (base - alphabet.length) - base
|
||
if (aiid >= 0 && Number.isInteger(aiid)) {
|
||
// 允许 aiid===0:当第一个用户(aiid==1)登录时,需要一个系统默认的邀请码。
|
||
return aiid
|
||
}
|
||
}
|
||
return null // null 代表一切非法的regcode
|
||
},
|
||
|
||
} |