随机数生成器
在线随机数生成器可按指定范围生成整数或小数,支持批量生成与不重复抽取,适合抽奖、摇号、随机点名、分组、掷骰子和测试数据。
生成范围的下限,包含该值。
生成范围的上限,包含该值。
一次生成多少个随机数,最多 10000 个。
生成范围内的整数(含端点),如摇号、掷骰子、随机点名。
勾选后生成的整数互不相同,适合抽奖、摇号、随机排座位;要求个数不超过范围内的整数总数。
每次点「再生成一批」都会重新随机抽取。本工具用于抽奖、摇号、点名、随机分组、掷骰子等日常场景, 属非加密随机数,请勿用于生成密码、密钥、验证码等安全敏感用途。
怎么用
- 设定范围:在「最小值」和「最大值」里填入生成区间,两端都包含在内。例如摇号填 1 到 100,掷骰子填 1 到 6,抽百分数填 0 到 100。整数模式下两端必须是整数。
- 选择数字类型与个数:默认生成「整数」;需要带小数的随机数就切到「小数」并设定保留几位(0–10 位)。在「生成个数」里填一次要抽多少个,最多 10000 个。
- 需要时勾选「不重复」:整数模式下勾选「不重复(无放回抽取)」,抽出的数字互不相同,适合抽奖、摇号、随机排座位。注意个数不能超过范围内的整数总数(如 1–10 最多抽 10 个)。
- 读结果并可再抽:结果区即时显示随机数;生成多个时还会给出个数、总和、平均值、最小值和最大值。点「🎲 再生成一批」即可用新的随机种子重新抽一组。
核心要点
随机数生成器按你设置的最小值、最大值、数字类型和个数生成结果;整数模式还可选择不重复抽取。
- 范围两端都包含在内(闭区间),如 1–6 会包含 1 和 6。
- 例如在 1–10 中抽 5 个不重复整数,某次结果可能是 8、2、10、1、5;最多只能抽 10 个。
- 小数模式可设定保留 0–10 位小数。
- 属非加密伪随机数,不要用于密码、密钥等安全场景。
原理与公式
随机数生成器的核心是一个伪随机数发生器(PRNG,Pseudo-Random Number Generator):它从一个随机种子(seed)出发,用确定性的数学公式推算出一串统计上均匀、彼此看不出规律的数。种子相同一定得到完全相同的结果;种子不同则通常得到不同结果(不是绝对——极少数情况下不同种子的前几个数也可能巧合相同)。本工具在页面加载时和你每次点「再生成一批」时,都会用浏览器的加密级随机接口(crypto.getRandomValues)取一个新的种子,所以刷新或重抽都会得到一组全新的数、几乎不可能刻意复现上一组——这正是日常随机工具该有的表现。
从 [0,1) 随机数映射到指定范围
PRNG 直接产出的是一个 [0, 1) 区间内的随机小数 u。要得到你指定范围里的数,概念上只需线性映射:
随机整数(含两端 min、max):整数 = min + ⌊u × (max − min + 1)⌋
(⌊ ⌋ 表示向下取整;+1 是为了让 max 也可能被取到。)
随机小数(按指定小数位数「均匀落在可表示刻度上」):先把范围换算成一张等间距刻度网格——步长为 10^−位数(如保留 2 位,步长 0.01),再在网格上均匀抽一个刻度。刻度下标 lo = ⌈min × 10^位数⌉,hi = ⌊max × 10^位数⌋小数 = (lo + ⌊u × (hi − lo + 1)⌋) ÷ 10^位数
这样每个结果一定落在 [min, max] 内,且区间内每个可表示刻度被抽中的概率相等(不像「先取连续小数再四舍五入」那样会把结果舍到区间外、或让两端点概率减半)。若范围内不存在该位数的小数(如 0.04–0.06 保留 1 位小数,0.0 与 0.1 都在区间外),工具会直接提示你扩大范围或减少小数位数。
大范围为什么也能保持均匀
简单的线性映射只在范围不太大时才自然均匀。这里的关键不在「单次输出的位数」,而在发生器的内部状态与种子的熵:如果 PRNG 只有 32 位状态(约 43 亿种),那么无论怎样拼接多次输出,整条随机序列都被这不到 32 位的信息完全决定,超过 2³² 个候选就必然有整段数字永远抽不到(例如把它摊到2³³ 个整数上,结果会全是偶数)。
为此本工具采用 128 位内部状态的 sfc32 算法,并在页面加载和每次「再生成一批」时用浏览器加密级接口(crypto.getRandomValues)取四个相互独立的 32 位随机字作为种子——种子本身就携带约 128 位熵,足以「寻址」到范围内的任意一个数。在此基础上,工具再拼接两次输出凑足 53 位随机比特以覆盖更宽的范围,并配合拒绝采样(落到会造成偏斜的尾部区间就重新抽)消除取模偏差。因此在安全整数范围(±2⁵³,约 9×10¹⁵)以内,范围里每个整数、每个可表示小数刻度都在统计意义上等概率出现(既无取模偏差,也无覆盖缺口);超出该范围的输入会被直接拒绝并提示缩小范围,而不会给出有偏差或不精确的结果。
汇总值(总和 / 平均值)的精度规则
生成多个数时给出的总和与平均值均用高精度十进制累加(decimal.js),不走会丢位的浮点相加:
- 总和在安全整数范围内精确无误差;整数模式保留 0 位小数,小数模式按你设定的小数位数呈现。
- 平均值至少保留 6 位小数;当你设定的小数位数多于 6 位时,按你设定的位数呈现(例如保留 10 位时,极小的
0.0000000001也不会被舍成 0)。 - 若某组范围与个数的组合会让总和超出安全整数范围,工具会拒绝生成并提示缩小范围或减少个数,以保证展示的汇总值始终准确。
有放回 vs 无放回(不重复)
默认是有放回抽取:每个随机数独立生成,允许重复。勾选「不重复」则是无放回抽取——像从盒子里摸球摸出不放回。范围较小时用「部分洗牌」(Fisher–Yates 算法)打乱区间内全部整数后取前几个;范围很大时用「拒绝采样」(生成后遇到重复就丢弃重来)。因此不重复模式要求个数 ≤ 范围内整数总数。
计算示例
设 min = 1、max = 6(掷骰子),若 PRNG 给出 u = 0.42:1 + ⌊0.42 × (6 − 1 + 1)⌋ = 1 + ⌊0.42 × 6⌋ = 1 + ⌊2.52⌋ = 1 + 2 = 3
即得到点数 3。对 6 个等宽子区间而言,1–6 每个点数被取到的概率都是 1/6,分布均匀。
关于「随机」与安全性
本工具采用通用(非加密)PRNG,分布均匀、速度快,适合抽奖、摇号、点名、分组、掷骰子、生成测试数据等。它不是密码学安全的随机源:不要用它生成密码、密钥、验证码或任何安全敏感的随机值——那类用途应使用操作系统/浏览器提供的加密级随机接口(如crypto.getRandomValues)。本页所有计算均在浏览器本地完成,不上传任何数据。
常见问题
- 在线随机数生成器怎么指定范围并批量生成数字?
- 可以。填入最小值和最大值(两端都包含),选择生成整数还是小数、要几个,点「再生成一批」即可。例如要「1 到 100 之间的随机整数」就把最小值填 1、最大值填 100、类型选整数、个数填 1;要一次抽 5 个不重复的号码,把个数改成 5 并勾选「不重复」。所有计算都在你的浏览器本地完成,不联网、不上传。
- 随机数生成器的不重复抽取和普通模式有什么区别?
- 普通模式是「有放回」抽取:每个随机数都独立生成,可能出现重复(掷两次骰子都是 6 是正常的)。勾选「不重复」是「无放回」抽取:抽出的整数互不相同,就像从写好号码的盒子里一个个摸球、摸出不放回,常用于抽奖中奖号、随机点名、随机分组、打乱座位。因为不能重复,所以要抽的个数不能超过范围里的整数总数——比如 1–10 只有 10 个整数,最多抽 10 个。
- 随机数生成器是真随机吗?能用于密码或正式抽奖吗?
- 本工具生成的是计算机伪随机数(PRNG),适合抽奖、摇号、点名、掷骰子和测试数据等非安全日常场景,但不是密码学安全的随机源。密码、密钥、验证码和加密令牌应使用系统提供的加密级随机接口。用于有争议或需审计的正式抽奖时,还应采用符合主办规则的流程,并保留抽取规则、操作录屏或第三方见证材料。
- 随机数生成器怎么生成指定小数位数的随机数?
- 把「数字类型」切到「小数」,再设定 0–10 位小数。工具会按设定位数对应的刻度生成范围内结果:例如范围 0 到 1、保留 4 位,某次可能得到 0.3271;范围 0 到 100、保留 2 位,某次可能得到 37.42。位数设为 0 时只生成整数。若范围内没有符合该位数的刻度,例如 0.04 到 0.06 保留 1 位,工具会提示扩大范围或减少小数位数。
- 随机数生成器为什么每次结果不同?能复现同一组数字吗?
- 每次点击「再生成一批」或重新打开页面,工具都会从浏览器随机接口取得新种子,因此结果通常不同。本页不提供手动固定种子的入口,无法按同一种子复现上一组数字。科研或程序调试若要求可复现序列,需要在代码中保存固定 seed,并调用支持传入该 seed 的随机数函数。
- 随机数生成器一次能生成多少个数字?范围可以包含负数吗?
- 一次最多生成 10000 个随机数,足够覆盖抽奖名单、随机分组、批量测试数据等场景。范围可以填负数,也可以最小值和最大值一正一负,例如 −50 到 50;只要最小值不大于最大值即可。整数模式下要求两端都是整数;小数模式下两端可为任意数值。当最小值等于最大值时,生成的每个数都等于该值。