在线随机数生成器
支持指定范围的随机整数、随机小数与幸运抽签,基于浏览器密码学随机源 crypto.getRandomValues,比 Math.random 更均匀公平。所有数据仅在浏览器本地处理,不会上传。
觉得好用?探索更多内容
随机数生成器使用说明
随机数在日常生活里用处很多:课堂随机点名、活动抽奖决定中奖名单、程序员生成测试数据、掷骰子决定谁去拿外卖……这款在线随机数生成器把这些场景整合成了三种模式,并且使用浏览器的密码学安全随机源 crypto.getRandomValues,而不是普通网页常用的 Math.random,随机质量更高、更公平。
三种模式的使用步骤:
- 随机整数:输入最小值与最大值(两端都包含),设置生成个数(1 到 100 个);勾选「不允许重复」后,同一批结果中不会出现相同的数,适合抽奖、点名排序。
- 随机小数:设置范围与小数位数(默认生成 0 到 1 之间、保留 6 位小数的数),可一次生成多个,适合模拟概率实验、生成测试数据。
- 幸运抽签:在文本框中每行输入一个名字,设置要抽取的人数,点击「开始抽签」即从名单中不放回地随机选出幸运儿,同一人不会被抽中两次。
- 结果以标签形式展示在下方,点击「复制结果」可把整批结果按行复制到剪贴板。
技术细节:生成整数时采用拒绝采样(rejection sampling)——先把随机源中会破坏均匀性的部分丢弃,再映射到目标区间,保证每个数被抽中的概率严格相等;小数则通过随机整数除以 10 的幂并四舍五入得到指定位数。所有计算都在浏览器本地完成,名单与结果不会上传到任何服务器。
常见问题(FAQ)
为什么用 crypto.getRandomValues 而不是 Math.random?
取模映射到范围会不会有偏差?
随机数会被上传或记录吗?
幸运抽签的名单格式是什么?
一次最多能生成多少个随机数?
相关知识:真随机、伪随机与拒绝采样
计算机本身是确定性机器,经典的伪随机数生成器(PRNG)用一个种子做递推运算,只要种子相同,输出的序列就完全一致;Math.random 就属于这一类,适合游戏、动画、抽样模拟等对质量要求不高的场合。而密码学安全伪随机数生成器(CSPRNG)在算法与熵源上都做了强化:浏览器会收集鼠标移动、时间抖动等环境熵喂给系统熵池,crypto.getRandomValues 读取的正是这个熵池,攻击者无法从历史输出推断后续数值。
拒绝采样是把「均匀的 0 到 2^32-1 随机整数」变成「均匀的 1 到 N 随机整数」的标准技巧:设 limit 为 2^32 中能被 N 整除的最大倍数,凡是大等于 limit 的样本一律丢弃重抽。虽然平均会浪费不到一半的样本,但换来了数学上严格均匀的分布。类似地,想把一组数据打乱顺序,可以用本工具配合 UUID 生成器 生成随机标识;做密码学相关的密钥生成则可以直接使用本站的 密码生成器 与 哈希计算器。