随机数生成器 - 在线生成指定范围和小数位数的随机数
免费在线随机数生成器,支持自定义范围和小数精度。可批量生成随机数,支持唯一/重复模式。使用 crypto.getRandomValues() 保证随机性。
什么是精度随机数生成器?
精度随机数生成器在指定范围内创建随机数,并对小数位数进行精确控制。与简单的 Math.random() 只能给出未格式化的 0 到 1 值不同,我们的工具让您可以设置精确的边界(最小/最大值),控制小数精度(0-15 位),决定是否允许重复,并批量生成结果——全部使用浏览器的加密安全 crypto.getRandomValues() API,提供真正的随机性而非可预测的伪随机序列。
如何生成随机数
设置范围
输入最小值和最大值来定义范围。可以使用整数、小数或负数。
选择精度
使用滑块或输入设置小数位数(0-15)。设为 0 只生成整数随机数,或更高值用于小数精度。
配置数量和重复
选择要生成多少个数字(1-100),以及结果中是否允许重复值。
生成并复制
点击生成按钮生成随机数。使用复制按钮将单个结果或全部结果复制到剪贴板。
随机数生成器常见用途
软件测试
为单元测试、集成测试和模糊测试生成随机测试数据。控制精度以匹配应用程序的预期输入格式。
统计采样
从总体范围创建随机样本,用于统计分析、A/B 测试和蒙特卡洛模拟,可配置精度。
游戏与彩票
生成随机骰子点数、抽牌或彩票号码。使用唯一模式确保抽奖中没有重复结果。
教育教学
创建随机数学题、练习数据集或课堂练习,数字可针对特定难度级别和精度要求定制。
随机数生成的工作原理
计算机无法仅通过算法生成真正的随机数——它们需要外部随机源(熵)。我们的工具使用 Web Crypto API 的 crypto.getRandomValues() 方法,该方法利用操作系统的加密熵池。该熵池从硬件源收集随机性,如鼠标移动、键盘计时、磁盘 I/O 和专用硬件随机数生成器(Intel CPU 上的 RDRAND)。
什么是 CSPRNG(加密安全伪随机数生成器)?
CSPRNG 是适用于加密用途的随机数生成器。它必须通过两个关键特性:(1) 下一位测试——即使知道所有之前的位,攻击者预测下一位的概率也不能优于 50%;(2) 状态妥协抵抗——即使内部状态部分泄露,也无法重建之前生成的数字。浏览器的 crypto.getRandomValues() 使用操作系统的 CSPRNG 实现(Linux 上的 /dev/urandom,Windows 上的 CryptGenRandom)。
Crypto.getRandomValues() 与 Math.random() 对比
| 特性 | crypto.getRandomValues() | Math.random() |
|---|---|---|
| 安全级别 | 加密级别 | 非加密级别 |
| 熵源 | 操作系统熵池(硬件 + 事件) | 确定性算法(xorshift128+) |
| 可预测性 | 无法预测 | 可能预测状态 |
| 推荐用途 | 密码、令牌、赌博、安全 | 动画、游戏、非关键随机 |
我们的工具通过均匀缩放将 getRandomValues() 的原始 32 位无符号整数映射到您指定的范围:result = min + (randomUint32 / 0xFFFFFFFF) × (max - min)。这确保整个范围内均匀分布且无模偏差,然后通过四舍五入应用小数精度。
如何在代码中生成随机数
学习在不同编程语言中生成具有精度控制的安全随机数。
JavaScript
// Secure random number with precision
function randomInRange(min, max, decimals) {
const range = max - min;
const rand = crypto.getRandomValues(new Uint32Array(1))[0];
const scaled = min + (rand / 0xFFFFFFFF) * range;
return +scaled.toFixed(decimals);
}Python
import random
import secrets
# Secure random float with precision
def random_in_range(min_val, max_val, decimals):
rand = secrets.randbelow(2**53) / (2**53)
result = min_val + rand * (max_val - min_val)
return round(result, decimals)Java
import java.security.SecureRandom;
public static double randomInRange(
double min, double max, int decimals) {
SecureRandom sr = new SecureRandom();
double rand = sr.nextDouble();
double result = min + rand * (max - min);
return Math.round(result * Math.pow(10, decimals))
/ Math.pow(10, decimals);
}随机数常见问题
多次出现相同的数字
如果启用了'允许重复',相同的结果是正常的预期现象,特别是在范围小、精度低的情况下。要获得唯一结果,请启用唯一模式。请注意,范围必须包含足够多的可能值才能生成请求数量的唯一数字。
请求的唯一数字过多
精度为 N、范围 R = max - min 时,最多有 floor(R × 10^N) + 1 个唯一值可用。例如,范围 1-10,0 位小数只有 10 个唯一整数。如果请求的唯一数字超过可用值,工具将显示错误。
数字看起来不够随机(出现聚集)
真正的随机性经常产生人类认为'不够随机'的模式——聚集、连续和近似重复是正常的。这被称为聚类错觉。我们的生成器产生均匀分布的随机数,经过浏览器 CSPRNG 验证。
crypto.getRandomValues() 的浏览器兼容性
crypto.getRandomValues() 在所有现代浏览器中都受支持(Chrome 11+、Firefox 21+、Safari 6.1+、Edge 12+)。如果您使用非常旧的浏览器,该工具可能无法工作。所有当前主流浏览器的版本都完全支持 Web Crypto API。
随机数生成常见问题解答
什么是随机数生成器?
随机数生成器(RNG)是一种产生缺乏可预测模式的数字的系统。有两种类型:使用物理熵源(热噪声、放射性衰变、大气噪声)的真随机数生成器(TRNG),和使用以初始值种子化的确定性算法的伪随机数生成器(PRNG)。我们的工具使用加密安全的 PRNG,从操作系统熵池获取种子,提供适合大多数应用的高质量随机性。
真随机与伪随机——有什么区别?
真随机数来自根本上不可预测的物理过程(量子现象、热噪声)。伪随机数来自确定性算法——给定相同的种子,产生相同的序列。CSPRNG 弥合了差距——它们使用算法但从真正的熵源获取种子,在实践中不可预测,同时对于测试来说又快速且可重复(如果您知道种子的话)。
小数精度在随机数生成中如何工作?
小数精度控制小数点后显示多少位数字。精度为 0 时,得到整数(如 42)。精度为 2 时,得到百分位(如 42.57)。精度通过 JavaScript 的 toFixed() 方法应用,将原始随机值四舍五入到指定的小数位数。精度越高,范围内可能的唯一值就越多,这在使用唯一模式时很重要。
为什么使用 crypto.getRandomValues() 而不是 Math.random()?
Math.random() 使用可预测的算法(通常是 xorshift128+),如果攻击者观察到足够多的输出,它可以被逆向工程。它适合动画和休闲游戏,但绝不应该用于密码、令牌、赌博或安全。crypto.getRandomValues() 使用操作系统的加密安全生成器,从硬件熵源获取种子,设计用于抵抗预测攻击。对于任何不可预测性很重要的应用,始终使用 crypto.getRandomValues()。
随机数生成器的实际用途有哪些?
随机数在许多领域至关重要:密码学(密钥生成、随机数、盐值)、游戏(骰子点数、洗牌、战利品掉落)、科学计算(蒙特卡洛模拟、随机化算法)、统计学(随机采样、自助法)、软件测试(模糊测试、随机测试数据)、彩票和赌博、A/B 测试(随机用户分配)以及安全(CSRF 令牌、密码生成)。我们的工具适用于精度控制重要的非加密应用。
应该允许还是禁止重复随机数?
取决于您的使用场景。对于大多数应用,允许重复是正确的——每个数字应该是一个独立的随机事件,重复是随机性的自然组成部分。当您需要无放回的随机抽样时防止重复——例如,抽取彩票号码、从池中选择随机获奖者或洗牌。请注意,防止重复需要足够大的范围来容纳您请求的数量。
可以设置种子以获得可重复的随机数吗?
我们的工具使用浏览器的 CSPRNG,不支持手动种子设置——这是出于安全考虑的刻意设计。如果您需要种子化(可重复)的随机数,您需要一个像 seedrandom.js 这样的确定性 PRNG 库或线性同余生成器。种子化的 PRNG 适用于游戏中的程序化生成、确定性测试和可重复研究,但不应用于安全敏感应用。
随机数范围有上限吗?
我们的工具支持 JavaScript 安全整数和浮点精度限制内的任何数值范围。实际范围由 JavaScript 的 Number 类型(IEEE 754 双精度)确定,它可以精确表示不超过 2^53 的整数和具有最多 15-17 位有效数字的小数。对于大多数使用场景——包括金融、游戏和统计——这些限制远远超出实际需求。
生成的数字在统计上有多随机?
这些数字来自浏览器的 CSPRNG,它通过了标准统计随机性测试(diehard、NIST SP 800-22)。我们到目标范围的缩放使用均匀除法(而非模运算),保留了均匀分布而不引入偏差。对于实际用途,输出在统计上与真随机数无法区分。对于加密应用,请信赖底层 CSPRNG,它是为此目的设计和审核的。