Command Palette

Search for a command to run...

如何在线生成随机数:范围、唯一集合以及何时随机性真正重要

如何在线生成随机数:范围、唯一集合以及何时随机性真正重要

T
Toolz Team
|Aug 23, 2026|15 最小读数

生成器 合集的一部分

随机数第一次咬我是在我开始构建 toolz。dev 几年前的一个 Laravel 副项目上。我需要简短的推荐代码,达到 rand() because it was right there, and shipped it。一周后两个用户的代码是一样的,不是因为赔率是天文数字,而是因为我误解了什么 rand() actually promised。那个小小的尴尬让我上了一课,我已经把这个教训带进了工具z。dev上的每一个工具:"随机"不是一回事,有一个随意的随机可以掷骰子,有一个严重的随机你需要价值守护任何事情的那一刻。

本指南是我希望当时有人告诉我的内容的长版本。我将介绍如何使用。 随机数生成器 toolz。dev 上,当唯独唯一的集合很重要时,为什么随机性的来源会改变您可以安全地使用输出的内容,以及我在构建时达到的实际情况。

TL;博士: 随机数生成器从您定义的范围中绘制值设置最小值和最大值,选择您想要的数字,并选择整数或小数。当没有值可能重复时,仅打开唯一值,这是您想要的抽奖、抽奖和采样,无需替换。toolz。dev 生成器完全在您的浏览器中运行,并且更喜欢 Web Crypto API 的随机性,因此您生成的任何内容都不会离开您的设备。

随机数生成器实际上做什么?

随机数生成器将不可预测的位源映射到一个范围。这就是整个作业。在浏览器中,重要的来源是 crypto.getRandomValues()的,Web加密API要求它在加密上很强 - 不像 Math.random()的,这就没有这样的承诺,你告诉它区间,说1到100,它从那个区间内部返回一个值,其中,理想情况下,每个值出现的机会都相等,要求一个以上,它重复平局。

有趣的部分是"不可预测,"这个词,因为计算机是确定性的机器,不会自然产生惊喜,它们产生的是伪随机性:一个看起来随机并通过统计测试的序列,但由一个算法从起始种子中给出相同的算法相同的种子,每次你都会得到相同的序列,那个可重复性是你在编写一个需要重复的测试时的一个特征,也是你在铸造一个必须无法猜测的东西时的责任。

在 toolz。dev 上,生成器位于浏览器中并从中读取其位 crypto.getRandomValues 当浏览器暴露它时,每个现代浏览器都会这样做。该功能由 W3C Web Cryptography API 定义,并得到操作系统的支持's 加密安全源。当该源存在时,数字的不可预测性足以进行安全相邻的工作,例如选择代币或洗牌。当它以某种方式不可用时,该工具会回落到标准的 JavaScript 生成器,该生成器对于游戏和采样来说很好,但永远不应该播下任何秘密。知道你处于这两个世界中的哪一个是使用任何 RNG 的最重要的事情。

如何在 toolz。dev 上生成随机数?

流故意短,因为大多数时候你只想要一个数字,而你现在就想要它。

首先设置范围。输入最小值和最大值。对于整数,范围两端都包含在内,因此 1 到 6 可以返回 1、2、3、4、5 或 6 中的任何一个,就像骰子一样。跨越零的负值和范围,例如 -50 到 50,以相同的方式工作。

Er,选择你要的几个数字,一个数字快摘,或者Zai你播种测试数据或建样时,一批最多一万。

第三,选择选项。对于整数,请留下 "仅限整数 " 打开,或者在需要分数值时将其关闭并设置小数位数。当没有数字可能重复时,打开 "仅限唯一值 "。

最后,单击"生成"。结果显示列表以及总和和平均值,整个批次复制为换行分离的列表,因此它会直接放入电子表格列、脚本或测试夹具中。如果您使用过 UUID密码生成器 toolz。dev上,这个的形状会让人感觉很熟悉,因为我尽量保持生成器的一致性。

我应该何时使用唯一的数字?

这是人们错过的选项,也是数学变化最大的选项。

默认情况下,生成器会进行替换抽奖。每次抽奖都是独立的,因此同一批次中可以出现不止一次的数字。对于掷骰子来说这是正确的,因为一对真正的骰子绝对可以得出两个四分球。但对于抽奖、抽奖或任何您在选择样品时(无需将令牌放回袋子中)来说都是错误的。

打开 unique-only,生成器不更换地抽取,它会记录它已经生产的内容,并跳过重复,直到它填满你的批次,经典用途是开奖号码:如果你想要从1到49的六个数字,没有重复,unique-only是有效票和坏票的区别。

这里有一个自然的限制,工具尊重它,你不能画出比范围可以容纳的更多的唯一整数,在 1 到 5 之间询问十个唯一数字,没有有效的答案,因为在那个区间里只有五个不同的整数存在。生成器停止并告诉您范围太小。我在观看生产代码中悬挂太多天真的洗牌循环后故意建立了守卫。

整数或小数:我需要哪些?

Integers 涵盖了大多数请求,骰子、彩票球、数组索引和记录计数都是整数,整数模式给你一个包容性的范围,与人们对那些事物的看法相匹配。

小数是连续量的:随机价格、模拟传感器读数、权重、概率 关闭整数模式,工具从包含最小值但不包含最大值的半开区间中提取。那个半开约定、最小包含和最大排除是每种语言中几乎每个浮点 RNG 的基础,包括 JavaScript's 自己的 Math.random的,它返回一个值范围从0到但不包括1。匹配该约定意味着你在这里得到的数字的行为就像你在代码中得到的数字一样。

您还可以控制小数点后面的数字,从一位到十位。当您模拟需要更精细分辨率的测量时,两个位置适合类似货币的值。请记住,唯一加小数几乎总是可以满足的,因为不同小数的空间是巨大的,而唯一加小数范围是您撞到上述墙上的地方。

"随机性如何"足够随机"?

这是我希望我之前见过的那个转介代码事件的表格。它将常见用例映射到它们实际需要的随机性类型。

用例 需要随机性 允许重复? 注释
骰子、棋盘游戏 伪随机就可以了 是的 每卷独立性是重点
随机选择获胜者 首选加密技术 否(唯一-唯一) 公平很重要,只使用唯一
彩票或抽奖号码 首选加密技术 否(唯一-唯一) 抽签无需更换
用于分析的采样行 伪随机就可以了 通常没有 唯一适用于无替代抽样
播种测试装置 伪随机就可以了 是的 甚至可以期望再现性
安全令牌、秘密 需要加密 这里切勿使用普通 PRNG

Trips 人们向上的行是"安全令牌。"通用RNG,即使是一个好的RNG,也不能替代专门构建的秘密生成器。如果您正在创建API密钥,会话令牌或密码,请使用专为该作业设计的工具,例如 密码生成器或者像这样的散列工具 哈希生成器 当你需要一个固定长度的摘要时。随机数生成器适用于某个范围内的数字,而不是加密密钥材料,并且该边界的诚实框架比假装一个工具做所有事情更有用。

我实际上可以用它构建什么?

这在我的工作流程中占有一席之地的一些方式。

UI进行渲染列表测试时,我生成一批几百个数字来代替数量,价格或分数,粘贴到固定装置中,突然间用逼真的多样性而不是相同的三个手工类型的行来锻炼布局对于WP Adminify上的WordPress工作我已经使用随机值来填充演示内容,因此设置屏幕在屏幕截图中看起来很活跃。

当客户运行赠品时,仅限唯一模式从编号的参赛者列表中公平地选择获胜者。为每个参赛者分配一个号码,抽取尽可能多的唯一获奖者,完成。没有电子表格公式,没有关于抽奖是否被操纵的争论,因为这些号码来自我们双方都不控制的来源。

为快速统计直觉,生成大批量,看一眼总和平均值,就是范围和分布表现的快速理智检查,如果我要求从1到100的数字,平均值回到50附近,世界就如预期。

And 对于日常的东西,它是骰子滚轮,当你把1和2当作正面和反面时,它是抛硬币,以及"选择一个数字"小论点的结算者。不是每一个用途都必须认真才能有用。

这与写自己的书相比如何?

你可以写 Math.floor(Math.random() * (max - min + 1)) + min 并且被完成。我已经写了那行一千遍了。那么为什么要伸手去拿工具呢?

2个原因,都学到了硬方法,第一个是渐进到手卷范围数学中的离一和模偏差错误,尤其是一旦你添加了包容性-对排他性边界和唯一性-唯一性要求工具处理边缘情况,包括"你要求比存在"情况更独特的值,所以你在凌晨2点时不会重新发现它们,第二个是 Math.random 是显式不加密安全,这是MDN文档明确指出的事实,而且很容易忘记,当你将一个片段粘贴到代码中,这些代码后来会保护一些真实的工具z。dev生成器默认加密源,因此更安全的行为是你不假思索地得到的。

对于您控制的环境中的一次性号码,片段就可以了。对于可重复的抽奖、唯一的集合、要复制的批次或默认情况下想要加密源的任何内容,该工具都会保存繁琐的部分。

如果您的工作更倾向于编码和格式化而不是数字生成,那么相同的客户端理念将贯穿工具箱的其余部分 洛雷姆·伊普萨姆 占位符文本的生成器到所涵盖的更广泛的集合 开发人员生产力工具 指南。因为这些中的每一个都在本地运行 数据隐私 所有这些故事都是一样的:您的输入保留在浏览器中。

人们对随机数犯的常见错误是什么?

Code,我和其他人's经过多年的审核,一把错又一把出现,值得点名,让你避之唯恐不及。

第一个是令人困惑的 " 不太可能 " 与 " 不可能。" 我的推荐代码故事正是这样的当你从一个范围用替换进行绘制时,碰撞不是一个错误,它们是给定足够绘图的统计确定性。生日悖论是经典的例证:在一个只有 23 人的群体中,两个人分享生日的几率超过 50%,远高于直觉所暗示的,因为你正在比较每对,而不是将每个人与一个固定的日期进行比较。如果您的值必须是唯一的,请不要希望范围足够大。仅打开唯一并消除疑问。

2是触及错误的来源,大量的教程显示了一个建立在基础上的范围公式 Math.random and never mention that it is not suitable for anything-sensitive-sensitive。value looks random, the demo works, and the habit sticks。then someone copy that slippet into code that generates a passodret reset token, and now the "random" token is predictable to anyone who understanding the loundal 算法。规则是生硬的:如果一个人永远无法猜测该值,它需要一个加密源。toolz。dev generator 默认该源,这是建立习惯更安全的默认值。

3个是范围边界的离一错误,包容性与排他性端点甚至是经验丰富的开发者都跳闸了,因为不同的语言和不同的函数做出不同的选择,100是我要求1到100时可能输出吗?对于这里的整数,是的,两端都包括了,对于小数,最大值被排除,匹配浮点约定。明确适用哪个约定可以防止安静的错误,因为你写了,你的骰子永远不会滚动六 < max 代替 <= max

4个是假设一个小样本看起来随机,真正的随机性产生团块和条纹,翻动公平的硬币十次,四头运行是完全正常的,然而人们看到它,并假设硬币,或者生成器,是破碎的随机性,与偶数间距不同,如果你想要均匀间隔的值,你根本不想要随机数生成器,你想要一个序列,知道你真正需要的是哪一个,那就是一半的战斗。

常见问题

随机数生成器如何工作?

随机数生成器将不可预测的位源映射到您选择的范围内。该工具在可用时从 Web Crypto API 读取字节,并将其缩放到最小到最大间隔中,因此该范围内的每个值绘制的机会相等。

数字真的随机吗?

它们是加密强伪随机数,对于所有实际目的来说都是不可预测的。当浏览器暴露 crypto。getRandomValues 时,输出适合令牌和洗牌;如果只有标准生成器可用,则这些值仍然分布良好,但不应用于秘密。

如何生成没有重复的唯一随机数?

启用唯一选项后再生成。该工具无需替换即可绘制,因此批次中的每个数字都不同。如果您要求的唯一整数多于范围可以容纳的整数,它会告诉您而不是永远循环。

它可以生成十进制数吗?

Yes。关闭整数选项,设置你想要的小数位数是多少,小数是从包含最小值但不包含最大值的半开区间中抽取的,这是连续范围的标准约定。

我可以使用负数吗?

Yes。输入负极小值、负极大值或跨零的范围,如-50到50。生成器处理负极和混合范围的方式与处理正极相同。

我一次可以生成多少个数字?

1批次最多10000个数字,结果包括总和和平均值,这样你就可以理智地- 一目了然地检查大批量,整个列表复制为换行分离值。

这个随机数生成器是免费的、私有的吗?

Yes。免费,没有注册,也没有使用上限,每个数字都是在你的浏览器中生成的。任何范围,计数或结果都不会传输到服务器。

我可以使用随机数生成器做什么?

常用用途包括选择彩票或抽奖号码、为游戏掷骰子、随机选择获胜者、播种测试数据、采样行进行分析以及随机排列列表的顺序。唯一模式涵盖任何需要采样且无需重复的情况。

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!