export function randomNum(len, radix) {
const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
const uuid = []
radix = radix || chars.length
if (len) {
// Compact form
for (let i = 0; i < len; i++) {
uuid[i] = chars[0 | Math.random() * radix]
}
} else {
// rfc4122, version 4 form
let r
// rfc4122 requires these characters
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
uuid[14] = '4'
// Fill in random data. At i==19 set the high bits of clock sequence as per rfc4122, sec. 4.1.5
for (let i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16
uuid[i] = chars[(i === 19) ? (r & 0x3) | 0x8 : r]
}
}
}
return uuid.join('') + new Date().getTime()
}
该函数接受两个参数:len
和 radix
。其中:
len
:表示要生成的随机字符串的长度。如果指定了len
,函数将生成一个指定长度的随机字符串。radix
:表示用于生成随机字符串的基数(进制)。默认值为chars.length
,即使用全字符集。
函数的主要逻辑如下:
-
首先,将所有可能的字符存储在
chars
数组中。 -
如果指定了
len
参数,则生成一个指定长度的随机字符串。循环len
次,每次从chars
数组中随机选择一个字符,将其添加到uuid
数组中。 -
如果未指定
len
参数,则生成一个符合 rfc4122 标准版本 4 的 UUID。UUID 的格式为xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
,其中 x 表示任意字符,y 表示 8、9、A 或 B。根据标准,需要在特定位置插入-
和4
字符。 -
最后,将
uuid
数组转换为字符串,并附加上当前时间的时间戳,返回生成的随机字符串或 UUID。
总的来说,该函数用于生成随机字符串或符合特定标准的 UUID。可以根据需要调整生成字符串的长度和基数(进制)来满足具体的使用场景。