在线抛硬币
输入抛掷次数(1~1000)即可抛硬币:单枚直接给出正面或反面,多次给出正反次数与逐枚结果序列。随机源为浏览器 Web Crypto 加密级随机数,全程本地完成、不上传不保存;填入种子可用同一序列复现结果,适合课堂概率实验与需要举证的公平决策。
二选一的事最难:两边理由相当,谁也不服谁。抛硬币把决定权交给一次不可预测的随机——本页用浏览器加密级随机源(与密码生成器同源),比「心里猜一个」公平,比任何服务端摇号透明。
单枚抛掷直接看正反面;连续多枚会统计正反次数并列出逐枚结果序列,做概率实验、验证「是不是偏向某面」时非常直观。填了种子的抛掷完全可复现:同一种子、同一序列,适合作公开摇号的最小存证。
—
这个工具解决你的问题了吗?
提交后会把工具名、你的输入与当前结果发送到服务器;请勿填写身份证号、手机号等隐私信息。
AI 助手 会结合你当前的输入与结果回答
追问会再次把当前输入与结果发送到服务器;请勿填写隐私信息。
使用步骤
- 填抛掷次数:单枚决策填 1,模拟实验填 10~1000。
- 可选:填一个数字种子,让结果可复现(留空则每次都用新的加密随机)。
- 点「抛一次」:单枚看正反面,多枚看正反次数统计。
- 需要举证时把序列与种子一起截图,同种子重抛即可核对同一结果。
计算原理与示例
单枚抛硬币
次数填 1,种子可留空,点「抛一次」,结果区直接显示正面或反面。
连续多枚统计
次数填 10~1000 后抛掷,结果区显示正、反各出现的次数,下方逐枚列出结果序列(超过 60 枚截取显示)。
种子复现
先填一个数字种子再抛掷:同一种子与同一次数必然得到同一序列,可与对方共同验证结果没有被改动。
代码示例
JavaScript 加密随机源抛 n 枚硬币并统计
function flip(n) {
const buf = new Uint32Array(n);
crypto.getRandomValues(buf);
let heads = 0;
const seq = [...buf].map(v => {
const h = v % 2 === 1;
if (h) heads++;
return h ? 'H' : 'T';
});
return { heads, tails: n - heads, seq };
}
console.log(flip(10));
Python 同口径的 Python 版(secrets 模块)
import secrets
def flip(n):
seq = ['H' if secrets.randbits(32) % 2 else 'T'
for _ in range(n)]
heads = seq.count('H')
return heads, n - heads, ''.join(seq)
print(flip(10))
常见问题
抛硬币的结果可靠吗?用的什么随机源?
本页使用浏览器内置的 Web Crypto 加密级随机数(crypto.getRandomValues),与密码生成器同源,分布均匀且不可预测,比服务端伪随机或「口头猜一个」更可信。
抛很多次,正面反面会正好各占一半吗?
不会正好一半。抛 100 枚出现 45:55、57:43 都属于正常波动;次数越大比例才越接近 1:1(大数定律)。如果 10 枚出现 7:3 就怀疑硬币有问题,是对随机性的常见误解。
正面和反面代表什么,可以自己约定吗?
可以。页面上的「正面/反面」只是记号,事前双方约定好「正面=去、反面=不去」即可。引擎输出只有 H/T 两个符号,含义完全由使用者定义。
抛硬币对两个人公平吗?
只要随机源公平、约定在先,就是公平的——任何人无法预判结果。加密随机源保证了「不可预测」这一半;「不可篡改」靠种子复现:把种子和结果序列公开,任何人可在本页重算核对。
和随机数生成器里的骰子(2 面)模式有什么区别?
随机数生成器输出的是数字,需要再约定「1 是正、2 是反」;本页直接给出硬币正反与逐枚序列,并且带统计,适合「决策」和「概率实验」两类场景。两者底层同为加密随机,公平性没有差别。
最多能连续抛多少枚?为什么序列只显示前一段?
单次最多 1000 枚,正反统计始终完整。结果序列为便于阅读只展示前 60 枚,统计口径覆盖全部次数,不受显示截断影响。
种子是什么意思?填了会怎样?
种子是一段随机数的「起点编号」。填同一个种子、抛同一次数,得到的序列永远相同,可用于课堂演示和结果存证;不填则每次都用新的加密随机,结果不可复现(这才是真决策该有的形态)。
抛硬币记录和结果会被上传或保存吗?
不会。抛掷在浏览器本地完成,没有服务器参与,结果不上传;页面底部的「最近使用」仅存在你自己的浏览器里,随时可清空。
延伸阅读
来自本站原创文章,讲清这个工具背后的算法与口径。