在不使用Math.random()的请看下能不能生成20-80随机数?

📅 2026/7/3 5:31:27
在不使用Math.random()的请看下能不能生成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