CNCEC_APP/uni_modules/uview-pro/libs/function/guid.ts

43 lines
1.9 KiB
TypeScript
Raw Normal View History

2026-03-25 14:54:15 +08:00
/**
* https://www.jianshu.com/p/fdbf293d0a85
* uuidGlobally Unique Identifier, uuid(Universally Unique IDentifier)
* ,,v-for循环的时候,使index可能会导致更新列表出现问题
* item或者对某条信息流"不喜欢",
* v-for的时候,使id而不是循环的index
* @param len uuid的长度32
* @param firstU "u"true
* @param radix uuid的基数(),2-,8-,10-,16-
* @returns uuid字符串
*/
function guid(len: number = 32, firstU: boolean = true, radix?: number): string {
const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
const uuid: string[] = [];
const base = radix || chars.length;
if (len) {
// 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位
for (let i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * base)];
} else {
let r: number;
// rfc4122标准要求返回的uuid中,某些位为固定的字符
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';
for (let i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | (Math.random() * 16);
uuid[i] = chars[i == 19 ? (r & 0x3) | 0x8 : r];
}
}
}
// 移除第一个字符,并用u替代,因为第一个字符为数值时,该guid不能用作id或者class
if (firstU) {
uuid.shift();
return 'u' + uuid.join('');
} else {
return uuid.join('');
}
}
export default guid;