微信小程序页面实现分享功能

记录-随机数

常见的几种随机数

  • 一.常规随机数
    1. Math.random()
  • 二.更安全或可控的随机数
    1. crypto.getRandomValues()
    2. crypto.randomUUID()
  • 三.伪随机
    1. 基于 Date.now() 的随机
  • 四.第三方库
    1. Lodash: _.random(min, max)
    2. Chance.js: 生成随机数、随机名字、随机句子
    3. UUID 库: uuid.v4()

一.常规随机数

1.Math.random()

📖Math

生成一个 [0, 1) 之间的浮点数。

常用于前端大多数场景,比如抽奖、随机颜色、随机数组索引。

1
2
const number = Math.random();
console.log(number); // 0.4833704909409956

常用于:

结合范围取整(利用 .floorMath.ceilMath.round

1
2
3
4
5
6
7
8
9
// 生成 [min, max) 的随机整数
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}

// 生成 [min, max] 的随机整数
function getRandomIntInclusive(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}

二.更安全或可控的随机数

1.crypto.getRandomValues()

📖Crypto.getRandomValues()

浏览器提供的 安全随机数生成器

使用密码学安全的随机数填充传入的 TypedArray

返回值是整数(TypedArray),适合做加密、令牌、唯一 ID

1
2
3
4
const array = new Uint32Array(1);
crypto.getRandomValues(array);
console.log(array[0]); // 一个安全随机整数
// 2687353166

2.crypto.randomUUID()

Crypto 接口的 randomUUID() 方法用于通过密码学安全的随机数生成器生成第四版 UUID

1
2
const uuid = crypto.randomUUID();
console.log(uuid);// const uuid = crypto.randomUUID();

三.伪随机

1.基于 Date.now() 的随机

1.基于时间戳(不是真正的随机,更接近“伪随机”。)

1
const r = Date.now() % 100; // 取时间戳最后两位作为“随机”   284

2.与 Math.random() 结合

1
2
const r = Math.round((Math.random() * 1000 + Date.now()) % 1000);
console.log(r); // 671

四.第三方库

1.Lodash: _.random(min, max)

📖 lodashjs/lodash

生成一个范围内的随机数,支持整数和浮点数。

1
2
3
4
5
6
7
import _ from 'lodash';

// 随机整数
console.log(_.random(0, 5)); // 0~5 之间的整数

// 随机浮点数
console.log(_.random(1.2, 5.2, true)); // 例如 3.14159

2.Chance.js: 生成随机数、随机名字、随机句子

📖 chancejs/chance

可以生成随机数、字符串、名字、地址、手机号、句子,甚至身份证号。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import Chance from 'chance';

const chance = new Chance();

// 随机整数
console.log(chance.integer({ min: 0, max: 100 }));

// 随机布尔
console.log(chance.bool());

// 随机字符串
console.log(chance.string({ length: 8 }));

// 随机名字
console.log(chance.name());

// 随机句子
console.log(chance.sentence());

3.UUID 库: uuid.v4()

📖 uuidjs/uuid

生成全局唯一 ID,常用于数据库主键、前端唯一标识。

1
2
3
4
import { v4 as uuidv4 } from 'uuid';

console.log(uuidv4());
// 示例: "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"