使用方法
- 选择“数字”“从列表中抽取”或“硬币和骰子”。
- 生成数字时,设置最小值、最大值、所需数量和小数位数;勾选“数字不重复”即可进行类似彩票的抽取。
- 从列表中抽取时,每行粘贴一个项目,然后选择抽取数量。每行内容只能抽取一次。
- 点击“生成”或“抽取”,然后复制结果。再次点击即可重新抽取。
工作原理
数字由 crypto.getRandomValues 生成,这是浏览器内置的加密安全随机数生成器,并非 Math.random。为了将随机位转换为指定范围内的数字,同时避免某些数值更容易出现,此工具使用拒绝采样:当一个随机 32 位数落在顶部无法被范围大小整除的剩余区间时,会将其丢弃并重新生成。简单地使用“随机数 % 范围”会让较小的数字略微更容易出现。
最小值和最大值都包含在范围内。设置小数位数后,范围会按相应的步长划分(两位小数的步长为 0.01),每个步长出现的概率相同,因此范围为 0 到 1、保留两位小数时,101 个可能值出现的概率相同。“不重复”模式会像抽奖一样进行无放回抽取;抽取不同数字的数量不能超过范围内的数字总数,超过时工具会提示你。
列表抽取器使用 Fisher–Yates 洗牌算法打乱各行顺序,并选取前 N 项,因此每项被选中的机会相同,且不会重复选中某一行。重复的行会被视为不同条目,因此同一个名字出现两次就有两次机会。空行以及每行开头和结尾的空格会被忽略。
掷硬币时,正面和反面出现的概率相同;每颗骰子掷出 1 到 6 点的概率也相同。结果不会被保存,因此包括我们在内的任何人都无法查看或重现抽取结果。
示例
乐透式抽取
最小值设为 1,最大值设为 49,抽取数量设为 6,并开启“不重复”和“排序”:你会得到 6 个不同的数字,例如 4、11、23、30、37、45。
抽取活动中奖者
粘贴参与者名单,每行一个名字,然后抽取 3 人。每位参与者最多中奖一次,且中奖机会相同。
生成测试用随机小数
最小值设为 0,最大值设为 1,小数位数设为 3,可生成 0.274 或 0.901 这样的数值。1,001 个可能值出现的概率都相同。
常见问题
这些数字是真正随机的吗?
这些数字由浏览器的加密安全随机数生成器生成,该生成器由操作系统根据硬件事件提供种子。它适用于抽取和安全用途;如用于受监管的彩票,请遵守要求使用认证设备的相关规定。
最小值和最大值都包含在范围内吗?
是的。范围为 1 到 6 时,可能得到 1、2、3、4、5 或 6,且每个数字出现的概率相同。
为什么开启“不重复”后会报错?
不重复抽取的数量不能超过范围内不同数字的数量:范围为 1 到 10 时,只有 10 个不同的整数。请扩大范围、增加小数位数,或允许重复。
之后有人能核验或重现我的抽取结果吗?
不能。结果不会被保存,也不会根据你之后可以重新输入的值来设置随机数种子。如需公开抽取,请立即录屏或复制结果。
隐私
数字和列表仅在浏览器中生成和处理。不会发送、存储或纳入分析统计。