← 返回首页

🎲 随机数产生器

指定范围,产生一个或多个随机数字。

这是什么工具?

随机数产生器 (RNG) 是一种按序列产生数字的工具或演算法,其中每个数字与先前的数字没有可预测的关系。随机数产生是计算、密码学、统计、游戏、科学模拟和日常决策的基础。有两类:伪随机数产生器 (PRNG),它使用数学演算法产生看似随机但实际上是确定性的序列;真随机数产生器 (TRNG),它从大气杂讯、放射性衰变或热杂讯等物理现像中获取随机性。对于大多数日常应用——选择彩票号码、掷虚拟骰子、选择随机样本或洗牌播放清单——高品质的 PRNG 就足够了。对于产生加密金钥或会话令牌等安全敏感应用程序,需要加密安全伪随机数产生器 (CSPRNG),因为如果发现标准 PRNG 的内部状态,则可以预测标准 PRNG。该工具提供了一种简单的方法来产生您指定的任何范围内的随机数,并提供独特(非重复)结果的选项以及用于采样、抽奖和模拟的可自订数量。

计算原理

PRNG 通常使用 Mersenne Twister 或线性同余产生器 (LCG) 等演算法。基本 LCG 公式为X(n+1) = (a × X(n) + c) mod m,其中 X 是序列值,a 是乘数,c 是增量,m 是模数。初始值 X(0) 称为种子。因为 PRNG 是确定性的,所以相同的种子总是产生相同的序列。 JavaScript 的数学.随机()使用 PRNG,适用于游戏和 UI 效果,但出于安全考虑,切勿使用。出于加密目的,请使用crypto.getRandomValues()在浏览器或秘密在 Python 中,它取自作业系统的 CSPRNG。为了公平洗牌,Fisher-Yates 演算法迭代数组,将每个元素与剩余未洗牌部分中随机选择的元素交换,确保完全均匀的排列。
Ad

使用方法

使用此工具产生随机数字非常简单。步骤一:输入范围的最小值。步骤2:输入范围的最大值。步骤3:指定要产生多少个随机数。第4步:选择您是否只需要唯一编号(无重复)或允许重复。第5步:点击“生成”即可立即查看结果。该工具会产生在指定范围内均匀分布的数字,这意味著每个数字被选择的机率相同。对于抽奖或采样等每次挑选都必须唯一的应用,请启用唯一选项。您可以根据需要多次产生新的数字组 - 每次单击都会产生新的独立抽奖,并且不会记住先前的结果。

参考对照表

使用案例典型范围笔记
彩票 (6/49)1–49, 6 个独特没有重复,经典格式
标准骰子1–6一个或多个骰子
抽奖1–100+唯一的票号
随机抽样1–N统计调查、A/B 抛硬币1||棋盘游戏。 Math.random
棋盘游戏旋转器1–12游戏机制
投掷硬币0–1二元决策
加密金钥全位元组范围需要 CSPRNG,而不是 Math.random

常见问题

常见问题

伪随机和真随机有什么差别?
伪随机数生成器 (PRNG) 使用数学算法生成统计上看似随机但完全确定性的序列。给定相同的起始种子,它们将始终复制相同的序列。真随机数产生器 (TRNG) 从不可预测的物理过程中获取随机性,例如大气杂讯(由 Random.org 使用)、放射性衰变或电子热杂讯。 TRNG 具有不确定性,但运行速度较慢且成本较高。对于大多数应用来说,精心设计的 PRNG 与真正的随机性没有什么区别。

电脑产生的随机数可以预测吗?
如果攻击者观察到足够的输出来推断内部状态,则可以预测标准 PRNG。这就是为什么 PRNG 绝对不能用于安全敏感的目的,例如加密金钥、密码产生或真钱赌博系统。加密安全 PRNG (CSPRNG) 的设计使得即使观察许多输出也无法预测未来或过去的值,这使得它们适合安全应用。

什么是种子?为什么它很重要?
种子是启动 PRNG 序列的初始输入值。相同的种子总是产生相同的数字序列,这对于可重复的模拟和调试很有用。改变种子会产生完全不同的序列。大多数应用程式自动从系统时钟或熵源播种 PRNG,但手动设定固定种子的能力对于科学再现性非常有价值。

Random.org 如何产生真正的随机性?
Random.org 使用大气噪声(世界各地雷击产生的无线电噪声,由无线电接收器捕获)作为其熵源。由于大气噪音基本上是不可预测的,因此所得的数字被认为是真正随机的而不是伪随机的。这使得 Random.org 适合真正的随机性很重要的高风险绘图、赌博和科学研究。

建议与须知

使用随机数进行统计抽样时,请务必确保样本量足够大以具有代表性 - 一个常见的准则是至少 30 个项目才能进行有意义的统计推断。对于抽奖和竞赛,请使用仅唯一号码选项来防止重复获奖者,并记录您的方法以保持透明度和公平性。如果您正在运行需要可重现以供同行评审的模拟,请设定固定种子并将其与结果一起记录。切勿将 Math.random() 或类似的 PRNG 用于安全应用程式 - 请务必使用 CSPRNG,例如 JavaScript 中的 crypto.getRandomValues() 或 Python 中的 Secret 模组。对于纸牌游戏和洗牌,请使用 Fisher-Yates 演算法,该演算法可保证完全均匀的随机排列,这与引入偏差的简单洗牌实现不同。产生加密数字时,请使用尽可能宽的范围(完整位元组值 0–255)并产生足够的位元组来满足演算法的要求 — AES-256 金钥需要 32 位元组的加密随机性。

Ad