RNG 随机数生成器

三个字母的版本:现在就要一个随机数。

—
选项

RNG 是 random number generator 的缩写,在编程语境里通常指伪随机发生器——一个播过种、输出确定的算法。这个区别要紧:带种子的 PRNG 做游戏没问题,碰安全就不行。

本页用的是浏览器的加密随机源,背后没有可复现的种子状态。想自己在代码里实现,下面的开发者笔记列出了两个最常见的错误。

使用方法

  1. 设好上下界,或保持 1-100。
  2. 想生成多少次都行,每次独立。
  3. 写代码前先读下面的笔记,别直接抄别处的片段。

几乎所有 RNG 片段都有的两个错误

第一,Math.floor(Math.random() * n) + 1 看着对,但用的是非加密 PRNG,范围大时乘法还会丢精度。第二,crypto.getRandomValues(buf) 之后直接 % n,在 n 不整除 2^32 时引入取模偏差,前几个值会略占优势。

正确写法是 rejection sampling:取一个 32 位值,落在不完整尾部就丢弃,再做取模。代价是偶尔多取一次,收益是偏差彻底消失。Python 的 secrets.randbelow(n) 已经这么做了,JavaScript 得自己写。

审校于 2026-10-21。这个工具完全在你的浏览器里运行——没有服务器、不需要账号,生成的内容也不会被保存。

常见问题

RNG 是什么的缩写?

Random number generator。CSPRNG 是它的加密变体,从操作系统的熵池取值,而不是跑一个带种子的公式。

这是真随机数发生器吗?

不是。真随机需要物理熵源。这里是操作系统播种的加密安全伪随机发生器,浏览器和服务器做 TLS 用的就是它。

JavaScript 里怎么取随机数?

用 crypto.getRandomValues 配合上面的拒绝采样。非安全场景可以用 Math.random(),但不能用于令牌、密码或任何被预测就有损失的地方。

相关工具

更多随机数工具。