如何生成随机数
- 输入最小值和最大值。两者都包含在抽取范围内,也可以使用负数(例如 −50 到 50)。
- 在数字个数中设置需要多少个数字,范围为 1 到 10,000。
- 小数位数保持为 0 即生成整数,选择 1 到 6 则可生成 3.75 这样的小数。
- 如果每个数字都必须不同,请关闭允许重复;打开结果排序可按从小到大的顺序列出。
- 点击生成(或在任意输入框中按 Enter)。使用复制或下载 .txt 保存数字,分隔符可选逗号、每行一个或空格。
- 常见用途可以直接使用快捷选项:1–10、1–100、掷骰子、抛硬币,或从 1 到 49 中抽取 6 个不重复的数字。最近 10 次抽取结果会显示在最近抽取中。
数字是如何选出的
生成器使用 crypto.getRandomValues(),即所有现代浏览器都内置的 Web Crypto API。它从密码学安全的随机数生成器返回随机比特,浏览器用操作系统的熵源为其提供种子。这比很多网页使用的 Math.random() 更可靠,后者的设计目标并不是不可预测。
随机比特以 32 位为一组,也就是有 4,294,967,296 种可能的值。要把它压缩到更小的范围,最直接的办法是取余(模)运算,但只要范围不能整除 4,294,967,296,这种方法就会产生细微的不公平。举个小例子就一目了然:用一个随机字节(256 个值)生成 1–100 范围内的数,1 到 56 每个数都有三种产生方式,而 57 到 100 只有两种,所以较小的数出现的概率要高出 50%。用 32 位时偏差很小,但仍然存在:以骰子为例,4,294,967,296 ÷ 6 余 4,所以 1 到 4 点出现的概率会比 5 和 6 点略高一点点。
本工具用拒绝采样消除这种偏差:它只接受小于范围大小最大倍数的随机值,在极少数落到该值以上的情况下重新抽取。这样,每个被接受的值映射到范围内各个数字的次数都相同,每个数字出现的概率完全相等。超过 32 位的范围使用 53 个随机比特,规则相同。
- 不重复就像从袋子里摸球:每个数字被抽中后就会被移除。要求的不重复数字个数不能超过范围内的数字总数;1–10 只有 10 个。
- 小数会在所选精度下的所有值中均匀抽取。保留 2 位小数时,0 到 1 意味着从 0.00、0.01 … 1.00 这 101 个值中抽取一个,每个值的概率相同。
- 排序只改变显示顺序;抽出的数字本身不变。
示例与概率
| 用途 | 设置 | 某一特定结果的概率 |
|---|---|---|
| 抛硬币 | 正面或反面 | 1/2 |
| 掷骰子 | 1 到 6,1 个数字 | 1/6 |
| 从 250 名参与者中抽出一名获奖者 | 1 到 250,1 个数字 | 每名参与者 1/250 |
| 彩票式 49 选 6 | 1 到 49,6 个数字,不重复 | 某一组号码为 1/13,983,816 |
| 问卷调查的随机抽样 | 1 到 5,000,200 个数字,不重复,排序 | 每个人被选中的概率为 4% |
结果可用于游戏、课堂活动、抽样和公平抽签。之前的结果永远不会影响下一次抽取,所以不存在哪个数字“该出了”。如果想抛硬币并记录正反面次数和连续情况,请使用抛硬币。要从名单而不是数字中抽取,可以试试幸运大转盘抽名器;需要安全的登录密码,请使用密码生成器;需要唯一 ID,请使用 UUID 生成器。
保护隐私,离线也能用
每个数字都在您的浏览器中生成,不会向服务器发送任何内容。您的设置和最近 10 次抽取结果保存在本设备浏览器的本地存储中,刷新页面后依然保留;点击清除历史记录即可删除。
常见问题
这个随机数生成器是真随机吗?
它使用浏览器的密码学安全随机数生成器,在实际应用中不可预测,适用于游戏、抽签和抽样。严格来说,它是一个以硬件和系统熵为种子的伪随机数生成器,操作系统生成加密密钥时用的也是这种生成器。
如何在 1 到 100 之间随机选一个数?
点击 1–100 快捷选项,或将最小值设为 1、最大值设为 100,然后点击“生成”。1 和 100 都可能出现,每个数字的概率都是 1/100。
如何生成不重复的数字?
关闭“允许重复”。这样每个数字只能出现一次,就像抽奖箱一样。如果要求的数字个数超过范围内的数字总数,工具会显示错误提示,而不会重复抽取。
可以用来做抽奖或赠品活动吗?
可以。给参与者编号,把范围设为 1 到参与人数,关闭重复,每个奖品生成一个数字。如果是公开抽奖,可以共享屏幕或录屏,让参与者看到结果。
可以生成负数或小数吗?
可以。输入负的最小值,例如 −100;选择 1 到 6 位小数位数即可生成小数。启用小数后,最小值和最大值也可以带小数,最多到所选的位数。
更新于