使用方法
- 设置范围
输入随机数的最小值和最大值。
- 选择选项
设置生成数量和是否允许重复。
- 生成随机数
点击计算按钮,立即获得随机数结果。
什么是随机数生成器?
随机数生成器(random number generator)是一种工具,它在指定的范围内随机抽取数字,使任何人都无法预测或刻意挑选。设定「最小值~最大值」区间,确定要抽取多少个,以及同一数值能否再次出现(允许重复·不重复),符合条件的数字列表便会立即呈现。
用在哪里?
- 抽奖·活动:在公平性至关重要的场合,如评选获奖者、发言顺序、分组分队时,消除人为偏向。
- 彩票·号码选择:用于按特定规则抽取号码,例如从1~45中不重复地抽6个。
- 模拟·抽样:适用于掷骰子、抛硬币的模拟实验、问卷受访者的随机抽样,以及A/B测试的分组。
本工具使用浏览器的crypto.getRandomValues(),基于操作系统熵生成高质量随机数,并消除破坏均匀分布的偏差。
计算公式
从范围 [min, max] 中抽取1个整数随机数,可用下式求得。
结果 = min + ⌊ r × (max − min + 1) ⌋
- min / max:范围的最小值·最大值(均包含)
- r:0以上、1以下(不含1)的均匀随机数
- max − min + 1:可能抽中的整数总数(= 范围)
示例:当 min=1、max=45、r=0.732 时1 + ⌊0.732 × 45⌋ = 1 + ⌊32.94⌋ = 1 + 32 = 33
不重复时,若已抽中的值再次出现就丢弃并重新抽取(拒绝采样)。因此必须满足抽取个数 ≤ 范围,在1~45中最多只能不重复地生成45个。
常见问题
这个随机数生成器是真正的随机吗?
它使用浏览器的 crypto.getRandomValues() API,基于操作系统熵生成密码学安全的随机数。其随机性远高于 Math.random(),结果几乎无法预测。
Math.random() 和 crypto.getRandomValues() 有什么区别?
Math.random() 是伪随机数,若知道内部种子,就能复现并预测整个序列。而 crypto.getRandomValues() 是使用操作系统熵源的 CSPRNG,因此无法预测。在抽奖等注重公平性·安全性的场合,应使用后者。
可以生成不重复的随机数吗?
可以,选择「不重复」即可。它采用拒绝采样方式,凡是与已抽中数字重复的就丢弃并重抽,所以结果中不会出现两次相同的值。
为什么会出现「无法不重复地生成N个」的错误?
因为要不重复地抽取,请求的个数不能大于范围内的数字个数(范围 = max − min + 1)。例如在1~10中不重复地抽15个是不可能的。请扩大范围或减少个数。
要抽彩票号码该如何设置?
将最小值设为1、最大值设为45、生成个数设为6、重复设为「不重复」,就能得到与韩国彩票(6/45)相同条件的号码。若想连特别号一并查看,把个数增加到7即可。仅供参考,不保证中奖。
也能生成小数(实数)随机数吗?
可以,将数字类型改为「小数」即可在范围内生成实数,并能指定所需的小数位数。例如需要0~1之间的概率值或坐标这类连续值时很有用。
随机数会不会存在偏差(bias)?
如果只取随机数除以范围的余数(取模),就会产生模偏差,使某些数字出现得更频繁。本工具通过拒绝采样消除该偏差,即丢弃超过范围最大倍数的值,使每个值都具有均等的概率。
可以再次复现相同的结果吗(种子)?
不可以。本生成器每次都用全新的熵且无种子地生成随机数,因此无法刻意复现相同序列。它适合抽奖这类只需公平抽取一次的用途;若实验需要可复现性,则应使用单独的基于种子的工具。
2026年验证公式