工具介绍
随机字母生成器从 26 个英文字母中选取一个或多个字母,使每个字母每次被选中的概率都相等、无偏。这种随机性的质量完全取决于其背后使用的随机数来源:使用 JavaScript 的 `Math.random()` 的简单实现是一种伪随机生成器,并非为抵御预测而设计;而 `crypto.getRandomValues()`——在 W3C Web Cryptography API 中定义——由你操作系统的密码学安全随机数来源提供支持。
本工具在生成每一个字母时都使用 `crypto.getRandomValues()`,这与本站[密码生成器](/password-generator/)所采用的方式相同——欢迎查看我们[对比测试哪些常见工具真正使用了安全随机数来源](/blog/online-password-generators-math-random-vs-crypto/)的文章,了解为什么即便是像挑一个字母这么简单的事,这个区别也值得关注。
“不重复”选项会对可用字母池执行 Fisher–Yates 式洗牌,并以不放回的方式抽取,从而保证结果中的每个字母都各不相同——这对于任何重复字母会造成问题的场景都很有用,例如分配唯一的单字母代码。
为什么使用它?
- 公平地为课堂活动、游戏(如随机字母破冰游戏或文字游戏)或抽奖挑选字母。
- 生成唯一的单字母标识符或代码,而不会意外重复。
- 获得真正无偏的随机字母,而不是依赖某个人无意识的字母偏好。
- 根据你的使用场景选择大写、小写或混合大小写。
- 100% 本地且密码学随机:一切都在你的浏览器中使用 crypto.getRandomValues() 运行,不会发送到任何服务器。
使用方法
- 设置你需要的字母数量(1 到 100)。
- 选择大小写:大写、小写或混合。
- 如果需要结果中的每个字母都彼此不同,请打开“No repeats”。
- 点击“Generate”生成结果,然后点击“Copy”将字母复制到剪贴板。
示例
输入
数量:5,大小写:大写,不重复:开启输出
Q, F, B, X, M每次运行都会产生不同的随机结果——这只是启用“不重复”选项时的一个示例输出,因此这五个字母保证各不相同。
选字母时 Math.random() 与 crypto.getRandomValues() 的对比
对于一般性的游戏来说,这种差异是感觉不到的。但对于任何可预测性真正重要的场景,情况就不同了。
| 特性 | Math.random() | crypto.getRandomValues() |
|---|---|---|
| 设计目标 | 速度与统计分布 | 不可预测性,抵御预测 |
| 是否适合安全敏感场景 | 否——MDN 官方文档明确如此说明 | 是——由操作系统的 CSPRNG 提供支持 |
| 本工具是否使用 | 否 | 是,用于生成的每一个字母 |
相关工具
如需其他随机生成器,请尝试以下工具。
常见问题
这是真正的随机,还是只是 Math.random()?
它使用 crypto.getRandomValues(),即由你的操作系统提供支持的 Web Cryptography API 密码学安全随机数来源——而不是许多同类工具在未声明的情况下使用的、更弱的 Math.random() 伪随机生成器。欲了解更多关于这一点为何重要的信息,请参阅我们对哪些常见生成工具真正使用安全随机数来源的实测对比。
“不重复”是做什么的?
启用后,工具会从可用字母池(单一大小写为 26 个字母,混合大小写为 52 个)中以不放回的方式抽取字母,因此结果中的每个字母都保证与该结果中的其他任何字母不同。若不启用,每个字母都是独立选取的,可能出现重复,就像多次掷骰子一样。
我最多能生成多少个不重复的字母?
纯大写或纯小写模式下为 26 个,混合大小写下为 52 个(因为同一字母的大写和小写版本被视为不同的结果)。如果你在开启“不重复”的情况下要求更多数量,数量会被限制在字母池的大小以内。
我可以生成混合大小写的字母,让同一个字母既有大写又有小写吗?
可以——在混合大小写模式下且“不重复”关闭时,没有什么能阻止“A”和“a”同时出现在同一结果中,因为它们是独立生成的。开启“不重复”并选择混合大小写时,它们会被视为字母池中的两个独立条目,因此两者仍可能都出现,只是各自不会超过一次。
我使用这个工具的情况会被追踪或发送到别处吗?
不会。所有随机生成都完全在你浏览器的客户端使用 Web Cryptography API 完成。不会上传或记录任何内容。