随机数生成器 — 指定范围在线抽取
支持范围、不重复和小数的加密级随机数生成器
在浏览器中处理 · 不上传任何内容
工具简介
设定最小值、最大值和需要的个数,工具就会帮你随机抽取数字。适合抽奖、排座顺序、测试数据、桌游规则,或者任何需要一个“谁也没选过”的数字的场合。支持负数范围,也可以切换到固定小数位数的小数模式。所有计算都在浏览器标签页中完成,设置和结果不会发送到服务器。
使用方法
- 选择 整数 或 小数。
- 输入最小值和最大值,两端的数字都可能被抽到。
- 输入需要的数量,范围 1 到 10,000。
- 如果每个数字都必须不同,打开 不重复。小数模式下还要选择小数位数。
- 点击 生成。查看结果时可以随时切换排序和分隔符,然后点击 复制 带走结果。
工作原理
- 随机来源:只使用
crypto.getRandomValues生成的 32 位值,从不使用Math.random。 - 均匀分布:直接对 32 位原始值取模会让小数字略占优势。工具会丢弃落在不均匀尾部的值并重新抽取(拒绝采样),保证每个数字机会均等。
- 超大范围:范围超过 2^32 时改用 BigInt 运算,即使是正负 9,007,199,254,740,991 的完整范围也不会有偏差。
- 不重复:使用 Floyd 抽样算法,只取所需数量的值,无需列出整个范围。每一种组合的概率都相同;不选排序时,顺序也是随机打乱的。
- 小数:在范围内所有 10^-位数 的倍数中均匀选取(两位小数即以 0.01 为步长),并以精确的文本输出,不会出现浮点误差。
- 显示选项:排序方式和分隔符(逗号、空格、换行)只重新排版已生成的数字,不会重新抽取。
示例
| 设置 | 可能的结果 |
|---|---|
| 1–33,6 个,不重复,升序 | 3, 8, 15, 21, 27, 32 |
| -10–10,5 个 | 7, -3, -3, 0, 10(允许负数和重复) |
| 0–1,两位小数,3 个 | 0.27, 0.84, 0.05 |
| 1–100,1 个 | 1 到 100 之间的任意一个数 |
常见问题
生成的数字真的随机吗?和 Math.random 有什么区别?
本工具只使用浏览器内置的加密随机数生成器(crypto.getRandomValues),从不使用 Math.random。它还会丢弃少数会让小数字更容易出现的原始值并重新抽取(拒绝采样),消除取模偏差,因此范围内每个数字出现的概率完全相同。
不重复模式下,如果要的数量超过范围内的数字个数会怎样?
比如从 1 到 5 里不可能抽出 6 个不同的数字,这时工具会提示错误,不生成任何结果。请扩大范围或减少数量。即使范围非常大,也只做所需数量的计算,速度依然很快。
数字最大可以到多少?
整数模式支持 -9,007,199,254,740,991 到 9,007,199,254,740,991 之间的任意安全整数,这是 JavaScript 能精确表示的整数上限。每次可以生成 1 到 10,000 个数字。
修改排序方式或分隔符会重新生成数字吗?
不会。排序和分隔符只改变已生成数字的显示方式。想要新的数字,请再点一次“生成”。