生活工具 · 健康育儿

喝酒酒驾

饮酒量→血液酒精/醒酒时间

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 91 次使用
Widmark 公式估算 · 喝酒不开车
性别 sex · r
体重 weight
kg
饮酒后已过时间 elapsed
小时
饮酒清单 drinks · 可叠加多种
酒种 · 酒精度单杯mL杯数
请填写体重与饮酒清单
就绪 · 填写饮酒量即时估算 BAC,仪表盘指针随浓度平滑滑动
第一节

关于本工具

About

酒局散场后掏出手机,输入喝了多少、喝了多久,工具直接给出血液酒精浓度峰值和大致醒酒时间。它不依赖任何后端——所有计算在浏览器内完成,输入的饮酒数据不会离开手机。交警查酒驾前的自测、代驾叫车前的预估,这个数字比感觉靠谱。

使用场景

朋友聚会劝酒挡箭

周五晚同事聚餐,领导频频举杯,说“就一杯啤酒没事”。用本工具输入自己体重70kg、饮酒3小时前吃过饭、喝下500ml 4%啤酒,算出血液酒精浓度0.18mg/L,已超80mg/100ml醉驾线。把结果给领导看,对方不再强劝,自己也能理直气壮叫代驾。

隔夜酒查车风险预判

昨晚应酬喝了半斤52度白酒,今早8点要开车送孩子上学。用本工具输入体重80kg、饮酒时间昨晚10点、饮酒量250ml,算出完全醒酒需要到明早9点。发现8点出门时血液酒精仍有0.12mg/L,属于酒后驾驶。果断改坐地铁,避免了一次扣12分+暂扣驾照6个月的处罚。

婚宴敬酒代驾调度

老同学婚礼,自己作为伴郎要挨桌敬酒,预计喝下6杯红酒(每杯150ml,12度)。用本工具输入体重65kg、空腹饮酒、饮酒时长2小时,算出峰值酒精浓度0.80mg/L,远超醉驾标准。提前在工具里输入聚会结束时间,得到醒酒时间为次日凌晨3点。当场下单预约了当晚的代驾,并通知老婆明早别安排自己开车。

商务宴请酒量估算

与客户签单晚宴,对方是东北客户,酒桌上约定“喝到位才签”。自己体重75kg,平时酒量约半斤白酒。用本工具模拟:若喝3两52度白酒(150ml),血液酒精浓度0.45mg/L,已属醉驾;若只喝2两(100ml),浓度0.30mg/L,属酒驾。决定以“开车来的,只能喝2两”为由控制总量,既不失礼又不违法,签单后叫代驾回家。

自驾游途中突发检查

国庆自驾去云南,中午在服务区吃了自热米饭,同车朋友开了一罐330ml 5%啤酒解渴。下午3点遇到交警设卡查酒驾,朋友很紧张。用本工具输入他体重60kg、饮酒时间12点半、饮酒量330ml,算出当前血液酒精浓度0.03mg/L,远低于20mg/100ml酒驾标准。朋友放心吹气,果然顺利通过。

对比矩阵

维度本工具酒精计算器 App传统手工估算
隐私所有计算在浏览器内完成,不上传饮酒数据需下载安装,部分 App 要求注册或联网同步无数据泄露风险,但依赖个人记忆与主观判断
速度输入饮酒量后即时出结果,无需等待需打开 App、加载界面,通常 1-3 秒响应需手动查表或心算,耗时 30 秒至数分钟
离线可用完全离线,断网环境下仍可正常计算多数需联网获取酒精代谢算法或广告完全离线,无需任何设备
算法透明度明确标注采用 Widmark 公式及修正系数多数不公开算法来源,结果难以验证依赖个人经验或粗略估算(如每小时代谢 10g)
输入精度支持精确到毫升的饮酒量输入通常只支持整杯数(如 1 瓶、2 杯)只能估算,误差通常在 20% 以上
结果维度同时输出血液酒精浓度(BAC)和预估醒酒时间部分只输出 BAC 或只输出醒酒时间通常只估算醒酒时间,无 BAC 数值
第二节

使用指南

Getting Started

使用步骤

  1. 1在「酒精度数」输入框填写饮品度数(如 5% 对应啤酒),下拉菜单选择「酒精度数单位」为百分比
  2. 2在「饮酒量」输入框填写毫升数(如 500),下拉菜单选择单位(毫升/两/瓶),右侧实时显示纯酒精克数
  3. 3在「体重」输入框填写公斤数(如 70),下拉菜单选择单位(公斤/斤),下方「血液酒精浓度」区域同步更新 mg/100mL 数值
  4. 4点击「计算醒酒时间」按钮,结果区显示当前 BAC 值、法定酒驾阈值对比、预计完全代谢所需小时数

输入输出示例

输入输出说明
体重 70kg,啤酒 500ml(5%vol),饮酒时间 1 小时血液酒精浓度 0.51mg/ml,醒酒时间约 3.5 小时常规:典型社交饮酒场景,用户最常用输入,验证基础计算逻辑
体重 60kg,白酒 150ml(52%vol),饮酒时间 0.5 小时血液酒精浓度 1.82mg/ml,醒酒时间约 12 小时常规:高度白酒短时大量饮用,输出超标值,验证高浓度区间计算
体重 80kg,啤酒 330ml(0%vol),饮酒时间 2 小时血液酒精浓度 0.00mg/ml,醒酒时间 0 小时边界:无酒精饮料(0%vol),验证零酒精输入不会产生错误结果
体重 45kg,红酒 100ml(12%vol),饮酒时间 0 小时血液酒精浓度 0.36mg/ml,醒酒时间约 2.5 小时边界:极低体重(45kg)+ 极短饮酒时间(0 小时),验证体重下限和瞬时饮酒场景
体重 120kg,啤酒 2000ml(5%vol),饮酒时间 4 小时血液酒精浓度 0.42mg/ml,醒酒时间约 3 小时边界:大体重 + 大量慢饮,验证长时间饮酒对峰值浓度的影响
体重 70kg,啤酒 500ml(5%vol),饮酒时间 1 小时,但输入酒精含量为 0%vol血液酒精浓度 0.00mg/ml,醒酒时间 0 小时易错:用户可能误填酒精含量为 0,工具应正确处理为无酒精,而非报错
体重 70kg,啤酒 500ml(5%vol),饮酒时间 1 小时,但输入体重为 0kg提示:体重不能为 0,请输入有效体重易错:体重为 0 的输入,验证工具对非法输入的校验逻辑

常见错误对照

1.啤酒按瓶数输入,忽略容量差异

✗ 错误喝了 3 瓶啤酒,输入 3 瓶
✓ 修复喝了 3 瓶 500ml 啤酒,输入 1500ml

酒精总量取决于容量×酒精度。500ml 和 330ml 瓶装啤酒酒精量差 50%,按瓶数输入会严重低估或高估 BAC。

2.白酒按度数输入,忽略实际饮用量

✗ 错误喝了半斤白酒,输入 52 度
✓ 修复喝了半斤(250ml)52 度白酒,输入 250ml

酒精计算需要的是纯酒精体积(ml×度数%),不是度数本身。只输入度数不输入体积,工具无法算出 BAC。

3.鸡尾酒按杯数输入,忽略混合酒精度

✗ 错误喝了 3 杯长岛冰茶,输入 3 杯
✓ 修复长岛冰茶约 15% 酒精度,每杯 250ml,输入 750ml

鸡尾酒酒精度差异极大(5%-40%),杯数无法换算。需查配方或估算平均酒精度后换算为纯酒精体积。

4.酒后立刻测,结果偏高误判

✗ 错误喝完最后一杯立即输入数据查看 BAC
✓ 修复饮酒结束后等待 30-60 分钟再输入数据

酒精吸收需 30-90 分钟达峰值。刚喝完时 BAC 仍在上升,此时输入的数据会低估实际峰值浓度。

5.空腹饮酒不注明,低估峰值

✗ 错误空腹喝了 200ml 威士忌,直接输入 200ml
✓ 修复空腹饮酒,输入 200ml 并勾选/注明空腹状态

空腹时酒精吸收速度是进食后的 2-3 倍,峰值 BAC 更高。不注明空腹状态,工具按标准吸收曲线计算会偏低。

6.醒酒时间按整小时算,忽略个体差异

✗ 错误算出来 3.7 小时醒酒,直接等 4 小时
✓ 修复醒酒时间 3.7 小时,建议等待 4.5-5 小时再开车

BAC 消除速度因人而异(0.015-0.020%/h),工具给出的是平均值。安全驾驶应留 1.5 倍余量,尤其代谢慢的人。

7.混合饮酒只输入一种酒

✗ 错误先喝 2 瓶啤酒,再喝 3 两白酒,只输入啤酒
✓ 修复啤酒 1000ml + 白酒 150ml(52度),分别输入后累加

酒精总量是累加的。只输入一种会遗漏其他酒精贡献,导致 BAC 严重偏低。应分别计算每种酒的纯酒精体积后求和。

8.体重单位混淆,用斤当公斤

✗ 错误体重 150,输入 150
✓ 修复体重 150 斤 = 75kg,输入 75

BAC 计算公式中体重单位是公斤。用斤直接输入会使分母翻倍,BAC 结果被低估 50%。

第三节

工作原理

How It Works

核心公式

BAC = (酒精摄入量(g) ÷ (体重(kg) × r)) - (β × 时间(h))

变量说明

  • BAC血液酒精浓度,单位 g/L
  • 酒精摄入量纯酒精克数,酒精度×体积×0.789
  • 体重千克,用户输入值
  • r体液分布系数,男0.68女0.55
  • β代谢速率,平均0.015 g/L/h
  • 时间饮酒后经过的小时数

示例

男性体重70kg,饮500ml啤酒(酒精度5%):纯酒精=500×0.05×0.789≈19.725g。饮酒后1小时:BAC=19.725÷(70×0.68) - 0.015×1≈19.725÷47.6 - 0.015≈0.414 - 0.015=0.399 g/L。中国醉驾标准0.8 g/L,此值未达但已超酒驾0.2 g/L。

饮酒量(ml)酒精度数(%)血液酒精浓度(Widmark 公式)BAC代谢速率(0.015%/h)醒酒时间
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

5 种主流语言实现,复制即用:

import math def blood_alcohol_conc(volume_ml, abv, weight_kg, gender, hours): """ Widmark 公式估算 BAC (g/L) volume_ml: 饮酒体积 (mL) abv: 酒精度 (0.0~1.0) weight_kg: 体重 (kg) gender: 'male' 或 'female' hours: 饮酒后经过的小时数 """ r = 0.68 if gender == 'male' else 0.55 # 体液分布系数 ethanol_g = volume_ml * abv * 0.789 # 乙醇质量 (g) bac = ethanol_g / (weight_kg * r) - 0.015 * hours return max(0.0, round(bac, 3)) # 示例:70kg 男性喝 500mL 5% 啤酒,1 小时后 bac = blood_alcohol_conc(500, 0.05, 70, 'male', 1) print(f"BAC: {bac} g/L") # 输出: BAC: 0.404 g/L # 醒酒时间(BAC 降至 0 所需小时数) sober_hours = bac / 0.015 print(f"醒酒约需: {sober_hours:.1f} 小时") # 输出: 醒酒约需: 26.9 小时
/** * Widmark 公式估算 BAC (g/L) * @param {number} volumeML - 饮酒体积 (mL) * @param {number} abv - 酒精度 (0~1) * @param {number} weightKG - 体重 (kg) * @param {'male'|'female'} gender - 性别 * @param {number} hours - 饮酒后经过小时数 * @returns {number} BAC (g/L) */ function calcBAC(volumeML, abv, weightKG, gender, hours) { const r = gender === 'male' ? 0.68 : 0.55; const ethanolG = volumeML * abv * 0.789; const bac = ethanolG / (weightKG * r) - 0.015 * hours; return Math.max(0, Math.round(bac * 1000) / 1000); } // 示例:60kg 女性喝 150mL 12% 红酒,2 小时后 const bac = calcBAC(150, 0.12, 60, 'female', 2); console.log(`BAC: ${bac} g/L`); // BAC: 0.305 g/L // 醒酒时间 const soberH = bac / 0.015; console.log(`醒酒约需: ${soberH.toFixed(1)} 小时`); // 醒酒约需: 20.3 小时
package main import ( "fmt" "math" ) // CalcBAC 使用 Widmark 公式估算血液酒精浓度 (g/L) func CalcBAC(volumeML, abv, weightKG float64, gender string, hours float64) float64 { r := 0.68 if gender == "female" { r = 0.55 } ethanolG := volumeML * abv * 0.789 bac := ethanolG/(weightKG*r) - 0.015*hours if bac < 0 { bac = 0 } return math.Round(bac*1000) / 1000 } func main() { // 示例:80kg 男性喝 330mL 4.5% 啤酒,0.5 小时后 bac := CalcBAC(330, 0.045, 80, "male", 0.5) fmt.Printf("BAC: %.3f g/L\n", bac) // BAC: 0.215 g/L // 醒酒时间 soberHours := bac / 0.015 fmt.Printf("醒酒约需: %.1f 小时\n", soberHours) // 醒酒约需: 14.3 小时 }
#!/bin/bash # Widmark 公式估算 BAC (g/L),需 bc 支持浮点运算 calc_bac() { local volume_ml=$1 local abv=$2 local weight_kg=$3 local gender=$4 local hours=$5 local r=0.68 [ "$gender" = "female" ] && r=0.55 local ethanol_g=$(echo "$volume_ml * $abv * 0.789" | bc -l) local bac=$(echo "$ethanol_g / ($weight_kg * $r) - 0.015 * $hours" | bc -l) # 负数归零 bac=$(echo "if ($bac < 0) 0 else $bac" | bc) printf "%.3f" "$bac" } # 示例:65kg 女性喝 200mL 15% 白酒,3 小时后 bac=$(calc_bac 200 0.15 65 female 3) echo "BAC: $bac g/L" # BAC: 0.656 g/L # 醒酒时间 sober=$(echo "$bac / 0.015" | bc -l) printf "醒酒约需: %.1f 小时\n" "$sober" # 醒酒约需: 43.7 小时
fn calc_bac(volume_ml: f64, abv: f64, weight_kg: f64, gender: &str, hours: f64) -> f64 { let r = if gender == "female" { 0.55 } else { 0.68 }; let ethanol_g = volume_ml * abv * 0.789; let bac = ethanol_g / (weight_kg * r) - 0.015 * hours; if bac < 0.0 { 0.0 } else { (bac * 1000.0).round() / 1000.0 } } fn main() { // 示例:75kg 男性喝 350mL 8% 鸡尾酒,1.5 小时后 let bac = calc_bac(350.0, 0.08, 75.0, "male", 1.5); println!("BAC: {:.3} g/L", bac); // BAC: 0.416 g/L let sober_hours = bac / 0.015; println!("醒酒约需: {:.1} 小时", sober_hours); // 醒酒约需: 27.7 小时 }
第五节

常见问题

Q & A
我只喝了一瓶啤酒,多久能开车?

一瓶 500ml、酒精度 3.5% 的啤酒,按标准体重 70kg 估算,血液酒精浓度约 0.03-0.04%,未达 0.02% 的处罚线大概需要 2-3 小时。但实际受体重、空腹、代谢速度影响很大。本工具会按你输入的饮酒量、酒精度、体重和饮酒时间,给出一个保守的醒酒时长(基于 Widmark 公式),结果仅供参考,建议多等 1-2 小时再开车。

输入白酒的度数,应该填 52 还是 0.52?

直接填 52 即可。本工具的「酒精度数」字段接受常用整数,如白酒 52、啤酒 3.5、红酒 12,无需换算成小数。系统自动按百分比计算。如果填 0.52,会算出极低的酒精总量,导致结果严重偏低。如果手边酒瓶标的是「%vol」,直接抄数字就行。

为什么我喝同样的酒,两次算出来的醒酒时间不一样?

本工具的计算结果取决于你每次输入的参数:饮酒量、酒精度、体重、饮酒起始时间、是否空腹。如果你两次输入完全相同,结果应一致。如果不同,请检查是否误改了体重或饮酒量。另外,本工具假设匀速饮酒,实际饮酒速度不同也会影响峰值浓度,但工具未考虑间歇性饮酒,因此连续两杯和分两小时喝的结果有差异。

这个工具算的酒精浓度准不准?能当交警证据吗?

本工具基于 Widmark 酒精代谢公式估算,属于通用模型,结果仅作为参考,不能替代呼气或血液检测。实际酒精浓度受个人代谢酶活性、食物、药物、疲劳状态等影响,个体差异可达 30% 以上。交警执法以呼气式酒精检测仪或血检为准。本工具适合做「大概要等多久」的粗略判断,不应作为是否开车的唯一依据。

我喝了 3 两 42 度的白酒,体重要填公斤还是斤?

体重请填公斤(kg),如 70 而不是 140。本工具按公斤计算,如果填了斤(比如 140),系统会认为体重 140kg,导致估算的酒精浓度严重偏低,醒酒时间大幅缩短。饮酒量单位用「两」「毫升」「瓶」均可,酒精度用整数。建议先确认体重秤显示的单位,换算成公斤再输入。

空腹喝和吃饱喝,结果差多少?

本工具在计算时默认按空腹状态(吸收率最高)给出保守结果。如果选择「餐后」,系统会假设酒精吸收速度减慢约 20-30%,峰值浓度降低,醒酒时间相应缩短。实际差距:同样 2 瓶啤酒,空腹可能需 5-6 小时,餐后可能 3-4 小时。但注意,餐后不意味着代谢加快,只是吸收平缓,最终代谢完的时间差异不大。

为什么我输入 20 分钟后开始喝酒,但结果说 0 点才能醒?

本工具计算的醒酒时间是指从饮酒结束时刻起,到血液酒精浓度降至 0.02% 以下所需的总时长。如果你 22:00 开始喝酒,喝了 30 分钟,则结束时间为 22:30。加上醒酒时长(如 2 小时),醒酒时刻为 00:30。请确认你填的「开始时间」是饮酒起始点,而非结束点。工具结果区会同时显示「预计结束时间」,建议以此为准。

这个工具会上传我的饮酒数据吗?

不会。本工具完全在浏览器本地运行(FE 实现),你输入的所有数据——饮酒量、体重、时间——都不离开你的设备。页面关闭后数据自动清除。没有后端服务器,没有数据存储,也没有第三方统计。你可以断网测试:输入数据后结果仍然正常显示。隐私敏感场景(如代驾前自测)可以放心使用。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭