Appearance
random
randomInt
js
// 生成 [min, max] 区间整数(包含两端)
export function randomInt(min, max){
if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
if (min > max) [min, max] = [max, min];
const range = max - min + 1;
const maxValid = Math.floor(0xFFFFFFFF / range) * range - 1;
let randomValue;
do {
randomValue = crypto.getRandomValues(new Uint32Array(1))[0];
} while (randomValue > maxValid);
return (randomValue % range) + min;
} else {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
}randomStr
js
export function randomStr(length, chars = 'abcdefghijklmnopqrstuvwxyz0123456789'){
let str = ''
for (let i = 0; i < length; i++) {
str += chars.charAt(randomInt(0, chars.length - 1))
}
return str;
}randomUUID
js
export function randomUUID(){
// 使用原生 API(Chrome 92+, Firefox 95+, Safari 15.4+)
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
return crypto.randomUUID();
}
const UUID_TEMPLATE = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
// 降级方案
return UUID_TEMPLATE.replace(/[xy]/g, (c) => {
const v = c === 'x' ? randomInt(0, 15) : randomInt(8, 11); // x: [0,15], y: [8,11]
return v.toString(16); // 转十六进制
});
}