生成随机整数、小数、UUID、颜色等,满足各种随机数需求
Generate random integers, decimals, UUIDs, colors and more for any purpose
暂无历史记录
No history yet
随机数生成器是一款在浏览器端生成高质量随机数的在线工具。随机数在计算机科学中有着广泛的应用:密码学中的密钥生成、蒙特卡洛模拟、随机抽样、游戏开发中的概率事件、A/B 测试中的分组分配、数据可视化中的噪声生成等。随机数分为两类:伪随机数(PRNG)和密码学安全随机数(CSPRNG)。普通的 Math.random() 使用线性同余算法,虽然对一般场景足够,但在安全敏感场景(如生成密码、Token)中不够安全。本工具提供两种模式:普通模式使用 Math.random(),适合抽奖、模拟等一般用途;安全模式使用 crypto.getRandomValues(),基于操作系统的真随机源,适合密码学和安全相关场景。
在线上活动抽奖中,使用随机数生成器从参与者中随机选取获奖者。也可以用于团队随机分组、课程随机点名等场景。确保"不允许重复"模式开启,避免同一个人被抽中多次。
生成一次性密码(OTP)、会话令牌、重置密码链接中的随机参数等安全敏感数据时,必须使用 CSPRNG 模式。系统级随机源保证了不可预测性,防止攻击者猜测或重现随机序列。
蒙特卡洛方法需要大量随机数进行概率模拟。使用本工具批量生成随机数(最多 1000 个),导出为 CSV 后导入 Python/R 进行统计分析、回归测试或性能基准测试。
JavaScript 的 Math.random() 返回 [0, 1) 范围内的浮点数。不同引擎使用不同算法:V8 使用 xorshift128+,SpiderMonkey 使用 xoshiro256**。这些都是高速 PRNG,但不适合安全用途。crypto.getRandomValues() 调用操作系统的 CSPRNG(如 Linux 的 getrandom()、Windows 的 BCryptGenRandom),产生不可预测的随机字节。将其转换为指定范围的整数需要使用拒绝采样(rejection sampling)以避免取模偏差(modulo bias)。
// 安全范围内的随机整数(避免取模偏差)
function secureRandomInt(min, max) {
const range = max - min + 1;
const maxValid = Math.floor(2**32 / range) * range;
const arr = new Uint32Array(1);
let result;
do {
crypto.getRandomValues(arr);
} while (arr[0] >= maxValid);
return min + (arr[0] % range);
}
// 生成 N 个不重复的随机数
function shuffle(arr) {
for (let i = arr.length - 1; i > 0; i--) {
const j = secureRandomInt(0, i);
[arr[i], arr[j]] = [arr[j], arr[i]];
}
return arr;
}
A>不安全。Math.random() 是伪随机数生成器,其内部状态可以被逆向推算。一旦攻击者获取足够多的输出值,就能预测后续所有随机数。密码学、安全令牌等场景必须使用 crypto.getRandomValues()。
A>当使用 random() % N 获取 [0, N) 范围的随机数时,如果随机数范围不能被 N 整除,某些值会出现得更频繁。例如用 [0, 256) 取模 100,0-55 出现概率为 2/256,56-99 为 1/256。拒绝采样通过丢弃超范围的值来解决这个问题。
A>可以使用 Box-Muller 变换:生成两个均匀分布的随机数 U1 和 U2,通过公式 Z = √(-2·ln(U1)) · cos(2π·U2) 转换为标准正态分布。本工具目前支持均匀分布,正态分布功能即将推出。
A>CSPRNG 模式不可重现(这正是其安全性的体现)。如果需要可重现的随机序列(如单元测试),建议使用 Mulberry32 等带种子的 PRNG 算法,相同种子产生相同序列。
A>单次最多生成 1000 个随机数。如需更多,可以多次生成并合并。批量生成时会自动检查是否有重复值(在"不重复"模式下),如果请求数量超过可用范围,工具会提示范围不足。