随机数生成器
三种模式:指定范围内生成随机整数(支持不重复抽取)、把一段数字随机打乱排序、多面骰子连掷。基于浏览器 Web Crypto 加密随机源,本地生成不上传。
抽奖抽签、课堂点名、决定谁先手、掷骰子——这些场合要的是公平且可解释的随机。本工具基于浏览器 Web Crypto 加密随机源,比 Math.random 更均匀、更不可预测;三种模式覆盖常见用法:闭区间抽整数(可开不重复)、连续区间整体打乱、多面骰子连掷。
用之前想清楚口径:抽奖要开不重复,等同不放回抽签;数量不能超过区间内的整数个数。另外随机不等于短期平均——连着开出两个相同结果完全正常,不要据此怀疑工具。需要全程可审计的抽奖,应提前公开规则与算法,而不是事后解释。
这个工具解决你的问题了吗?
提交后会把工具名、你的输入与当前结果发送到服务器;请勿填写身份证号、手机号等隐私信息。
AI 助手 会结合你当前的输入与结果回答
追问会再次把当前输入与结果发送到服务器;请勿填写隐私信息。
使用步骤
- 选模式:范围内抽整数 / 随机排序 / 掷骰子。
- 设参数:闭区间上下限与个数;抽奖勾选不允许重复。
- 点生成,结果即时出现;不重复模式下数量超区间会提示。
- 需要留证时复制结果文本;历史只存本机,不上传。
计算原理与示例
随机整数
随机整数:设定最小值、最大值和个数,区间为闭区间 [最小值, 最大值]。勾选「不允许重复」时等同于不放回抽签。
随机排序
随机排序:把最小值到最大值的连续整数(如 1~50)打乱顺序输出,适合课堂点名、抽签排序。
掷骰子
掷骰子:支持 2/6/20 面骰子,可设定连掷次数,每次结果相互独立。
代码示例
JavaScript 加密安全的区间随机整数
// [min, max] 闭区间,拒绝采样保证均匀
function randInt(min, max) {
const range = max - min + 1;
const limit = Math.floor(0x100000000 / range) * range;
const buf = new Uint32Array(1);
do { crypto.getRandomValues(buf); } while (buf[0] >= limit);
return min + (buf[0] % range);
}
randInt(1, 100);
Python 不重复抽取
import secrets, random
rng = secrets.SystemRandom() # 加密安全源
rng.sample(range(1, 51), 5) # 1~50 抽 5 个不重复
rng.randint(1, 6) # 掷骰子
# 注意:普通 random 模块是伪随机,抽奖等公平性场合用 SystemRandom
常见问题
随机数是真正的随机吗?
基于浏览器 Web Crypto API 的加密安全随机源,比 Math.random() 更均匀、更不可预测,满足抽奖、抽签等日常公平性要求。
最多能一次生成多少个?
单次最多 1000 个随机整数;随机排序最多支持 10000 个连续数字。
生成记录会被上传吗?
不会。所有随机数都在你的浏览器本地生成,历史记录也只保存在本机,不上传服务器。
抽奖用什么随机方式更公平?
用「不重复抽取」模式,保证同一个号码不会被抽中两次,并使用加密安全的随机源而非 Math.random。如果需要全程可审计,可以先固定随机种子并公开算法,抽奖结果就能被复核。
随机数和伪随机有什么区别?
真随机来自物理噪声,无法预测;伪随机由算法和种子产生,知道种子就能复现。加密安全伪随机(CSPRNG)不可预测,适合抽奖和密钥生成;普通的 Math.random 有可预测性,不适合安全场景。
怎么生成一组不重复的号码?
选择「范围内生成整数」模式,并开启不重复抽取,然后设定上下限和数量即可。注意数量不能超过区间内的整数个数,否则无法满足不重复的要求。
随机数的分布均匀吗?
均匀。加密随机源下每个取值范围被选中的概率是相同的,长期统计各数值出现次数会接近相等。但随机不等于「短期平均」——连续出现几个相同结果也属正常,不必据此怀疑工具不公平。
延伸阅读
来自本站原创文章,讲清这个工具背后的算法与口径。