@yhiot/utils
Version:
88 lines (72 loc) • 3.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.genRandomState = exports.genActivateCode = void 0;
/**
* 生成随机激活码, 10个字符长
* 算法:
* 获取以毫秒为单位的时间戳 timestamp = 1544717753370, 目前为13位.
* 将timestamp转化为字符串,前后各加一个1~9的随机数,得到715447177533708,然后翻转得到807335771744517,并转化为整数
* 获得字典dict的位数,作为进制转化的进制值,这里是43,可以理解成10进制,16进制的进制.
* 进制转化获得每一位用字典中字符表示的内容
* 不足10时,前面用字典的末尾来补充.一般最多补充ty
* @param {*} timestamp
*/
var genActivateCode = function genActivateCode(timestamp) {
// 在timestamp前后各加一个1~9之间的数字后倒序生成一个整数,保证这个整数不重复.因为timestamp然不一样.
if (!timestamp) timestamp = new Date().getTime();
var randCode1 = parseInt(Math.random() * 100) % 9 + 1;
var randCode2 = parseInt(Math.random() * 100) % 9 + 1; // let dict = '123456789ABCDEFGHJKMNPRSTUVWXY';
var dict = '123456789ABCDEFGHJKMNPRSTUVWXYacdefghjmnrty';
var dictlen = dict.length;
timestamp = timestamp + '';
var value = randCode1 + timestamp.substr(-13) + randCode2; // 十进制值字符串,
value = value.split('').reverse().join('');
value = parseInt(value, 10);
var result = '';
var tmpValue = value;
while (tmpValue > 0) {
var cindex = tmpValue % dictlen;
var tchar = dict.charAt(cindex);
tmpValue = parseInt(tmpValue / dictlen);
result = tchar + result;
}
var finalResult = (dict + result).substr(-10); // console.log({finalResult, result, value, timestamp});
// if (finalResult.length != result.length) {
// console.log('diff', finalResult.length-result.length, {finalResult, result, value, timestamp});
// }
return finalResult;
};
/**
* 获取9位随机state,用于oauth认证
* 算法同上.
* @param {*} timestamp
*/
exports.genActivateCode = genActivateCode;
var genRandomState = function genRandomState(timestamp) {
// 在timestamp前后各加一个1~9之间的数字后倒序生成一个整数,保证这个整数不重复.因为timestamp然不一样.
if (!timestamp) timestamp = new Date().getTime();
var randCode1 = parseInt(Math.random() * 100) % 9 + 1; // let randCode2 = parseInt(Math.random() * 100)%9+1;
// let dict = '123456789ABCDEFGHJKMNPRSTUVWXY';
var dict = '1234567890ABCDEFGHIJKLMNOPRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var dictlen = dict.length;
timestamp = timestamp + '';
var value = randCode1 + timestamp.substr(-13); // 十进制值字符串,
value = value.split('').reverse().join('');
value = parseInt(value, 10);
var result = '';
var tmpValue = value;
while (tmpValue > 0) {
var cindex = tmpValue % dictlen;
var tchar = dict.charAt(cindex);
tmpValue = parseInt(tmpValue / dictlen);
result = tchar + result;
}
var finalResult = (dict + result).substr(-8); // console.log({finalResult, result, value, timestamp});
// if (finalResult.length != result.length) {
// console.log('diff', finalResult.length-result.length, {finalResult, result, value, timestamp});
// }
return finalResult;
};
exports.genRandomState = genRandomState;