生活健康 本地计算 开箱即用 内置示例 不留痕迹

在线抛硬币

输入抛掷次数(1~1000)即可抛硬币:单枚直接给出正面或反面,多次给出正反次数与逐枚结果序列。随机源为浏览器 Web Crypto 加密级随机数,全程本地完成、不上传不保存;填入种子可用同一序列复现结果,适合课堂概率实验与需要举证的公平决策。

二选一的事最难:两边理由相当,谁也不服谁。抛硬币把决定权交给一次不可预测的随机——本页用浏览器加密级随机源(与密码生成器同源),比「心里猜一个」公平,比任何服务端摇号透明。

单枚抛掷直接看正反面;连续多枚会统计正反次数并列出逐枚结果序列,做概率实验、验证「是不是偏向某面」时非常直观。填了种子的抛掷完全可复现:同一种子、同一序列,适合作公开摇号的最小存证。

—

—

使用步骤

  1. 填抛掷次数:单枚决策填 1,模拟实验填 10~1000。
  2. 可选:填一个数字种子,让结果可复现(留空则每次都用新的加密随机)。
  3. 点「抛一次」:单枚看正反面,多枚看正反次数统计。
  4. 需要举证时把序列与种子一起截图,同种子重抛即可核对同一结果。

计算原理与示例

单枚抛硬币

次数填 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 枚,统计口径覆盖全部次数,不受显示截断影响。

种子是什么意思?填了会怎样?

种子是一段随机数的「起点编号」。填同一个种子、抛同一次数,得到的序列永远相同,可用于课堂演示和结果存证;不填则每次都用新的加密随机,结果不可复现(这才是真决策该有的形态)。

抛硬币记录和结果会被上传或保存吗?

不会。抛掷在浏览器本地完成,没有服务器参与,结果不上传;页面底部的「最近使用」仅存在你自己的浏览器里,随时可清空。

延伸阅读

来自本站原创文章,讲清这个工具背后的算法与口径。