在不使用Math.random()的请看下能不能生成20-80随机数?
当然可以。如果不使用 Math.random(),我们依然有多种方法可以生成指定范围内的随机数。具体取决于你的应用场景(是前端浏览器、后端 Node.js,还是纯算法需求)。
以下是几种常用的替代方案,它们都可以生成 20 到 80 之间的随机整数:
1. 使用 Web Crypto API(最推荐,用于浏览器环境)
如果你在前端项目中,这是替代 Math.random() 的最佳选择。它生成的是密码学安全的随机数,常用于生成 Token 或安全相关的随机值。
function getSecureRandomInt(min, max) {
const array = new Uint32Array(1);
window.crypto.getRandomValues(array);
// 将随机数映射到 [min, max] 范围内
return min + (array[0] % (max - min + 1));
}
console.log(getSecureRandomInt(20, 80));
2. 使用 Node.js 的 crypto 模块(用于 Node.js 环境)
如果你的代码运行在服务端,可以使用 Node.js 内置的加密模块。
const crypto = require('crypto');
function getSecureRandomInt(min, max) {
const range = max - min + 1;
// 生成一个随机整数,范围是 0 到 Number.MAX_SAFE_INTEGER
const randomInt = crypto.randomInt(range);
return min + randomInt;
}
console.log(getSecureRandomInt(20, 80));
3. 使用伪随机数生成算法(如 LCG 线性同余生成器)
如果你是在做算法题、游戏开发,或者处于一个完全不支持原生随机函数的受限环境,你可以自己手写一个简单的伪随机算法。
// 一个简单的线性同余生成器 (LCG)
class SimpleRandom {
constructor(seed = Date.now()) {
this.seed = seed;
}
next() {
// 常见的 LCG 参数
this.seed = (this.seed * 1664525 + 1013904223) & 0xFFFFFFFF;
// 返回 0 到 1 之间的浮点数
return (this.seed >>> 0) / 0xFFFFFFFF;
}
}
const myRandom = new SimpleRandom();
// 生成 20-80 的随机整数
const randomValue = Math.floor(myRandom.next() * (80 - 20 + 1)) + 20;
console.log(randomValue);
💡 核心数学公式提示
无论使用哪种底层随机源,生成 [min, max] 范围内整数的数学公式都是一样的:
Math.floor(随机源() * (max - min + 1)) + min
总结:
- 如果是常规业务/安全相关:首选
crypto.getRandomValues()。 - 如果是纯算法/受限环境:自己实现一个 LCG 算法。
posted on 2026-06-15 16:24 fox_charon 阅读(6) 评论(0) 收藏 举报
浙公网安备 33010602011771号