在线随机数生成器

支持指定范围的随机整数、随机小数与幸运抽签,基于浏览器密码学随机源 crypto.getRandomValues,比 Math.random 更均匀公平。所有数据仅在浏览器本地处理,不会上传。

随机数生成器使用说明

随机数在日常生活里用处很多:课堂随机点名、活动抽奖决定中奖名单、程序员生成测试数据、掷骰子决定谁去拿外卖……这款在线随机数生成器把这些场景整合成了三种模式,并且使用浏览器的密码学安全随机源 crypto.getRandomValues,而不是普通网页常用的 Math.random,随机质量更高、更公平。

三种模式的使用步骤:

  • 随机整数:输入最小值与最大值(两端都包含),设置生成个数(1 到 100 个);勾选「不允许重复」后,同一批结果中不会出现相同的数,适合抽奖、点名排序。
  • 随机小数:设置范围与小数位数(默认生成 0 到 1 之间、保留 6 位小数的数),可一次生成多个,适合模拟概率实验、生成测试数据。
  • 幸运抽签:在文本框中每行输入一个名字,设置要抽取的人数,点击「开始抽签」即从名单中不放回地随机选出幸运儿,同一人不会被抽中两次。
  • 结果以标签形式展示在下方,点击「复制结果」可把整批结果按行复制到剪贴板。

技术细节:生成整数时采用拒绝采样(rejection sampling)——先把随机源中会破坏均匀性的部分丢弃,再映射到目标区间,保证每个数被抽中的概率严格相等;小数则通过随机整数除以 10 的幂并四舍五入得到指定位数。所有计算都在浏览器本地完成,名单与结果不会上传到任何服务器。

常见问题(FAQ)

为什么用 crypto.getRandomValues 而不是 Math.random?
Math.random 是普通伪随机数,各浏览器实现质量不一,理论上输出可被预测;crypto.getRandomValues 是浏览器提供的密码学安全随机源,不可预测性与分布均匀性都更好。抽奖、抽签这类公平性敏感的场景用它更可靠。
取模映射到范围会不会有偏差?
随机源是一个 32 位无符号整数(0 到 4294967295),直接对范围取模时,若范围不能整除 2 的 32 次幂,区间前段的数会略微多出现几次。本工具采用拒绝采样:先计算能被范围整除的上限,丢弃超过上限的随机值再取模,因此每个数出现的概率严格相等,偏差为零。
随机数会被上传或记录吗?
不会。所有随机数都在你的浏览器本地生成,抽签名单与结果不会离开你的设备,历史只保留在当前页面中,刷新即清空。
幸运抽签的名单格式是什么?
每行一个名字或编号即可,支持直接从 Excel 粘贴一整列名单。抽取是不放回抽样:设置抽 3 人就输出 3 个互不相同的结果;抽取人数不能超过名单行数。
一次最多能生成多少个随机数?
整数与小数模式一次最多生成 100 个;勾选不允许重复时,个数不能超过范围大小,例如 1 到 100 的范围内最多生成 100 个不重复的整数。如需更大批量,可多次点击生成。

相关知识:真随机、伪随机与拒绝采样

计算机本身是确定性机器,经典的伪随机数生成器(PRNG)用一个种子做递推运算,只要种子相同,输出的序列就完全一致;Math.random 就属于这一类,适合游戏、动画、抽样模拟等对质量要求不高的场合。而密码学安全伪随机数生成器(CSPRNG)在算法与熵源上都做了强化:浏览器会收集鼠标移动、时间抖动等环境熵喂给系统熵池,crypto.getRandomValues 读取的正是这个熵池,攻击者无法从历史输出推断后续数值。

拒绝采样是把「均匀的 0 到 2^32-1 随机整数」变成「均匀的 1 到 N 随机整数」的标准技巧:设 limit 为 2^32 中能被 N 整除的最大倍数,凡是大等于 limit 的样本一律丢弃重抽。虽然平均会浪费不到一半的样本,但换来了数学上严格均匀的分布。类似地,想把一组数据打乱顺序,可以用本工具配合 UUID 生成器 生成随机标识;做密码学相关的密钥生成则可以直接使用本站的 密码生成器 与 哈希计算器。

🍪 隐私提示 我们仅收集提供服务所必需的信息(详见《隐私政策》),不出售、不追踪。