喝酒酒驾 BAC 估算
性别
体重 kg
酒精类型
饮量 mL
饮后小时数
血液酒精浓度 BAC(每 100 mL 血液毫克)
饮酒量→血液酒精/醒酒时间
性别
体重 kg
酒精类型
饮量 mL
饮后小时数
血液酒精浓度 BAC(每 100 mL 血液毫克)
· 酒驾(GB 19522-2010):BAC ≥ 20 mg / 100 mL
· 醉驾:BAC ≥ 80 mg / 100 mL(吊销驾照 + 刑事追责)
· 代谢速率:成年人约 10-15 mg / (100 mL·小时)
· 仅作参考估算 — 实际个体差异大,喝酒不开车 / 开车不喝酒
了解工具定位 · 使用场景 · 对比优势
输入饮酒量、酒精度数和体重,估算血液酒精浓度(BAC)峰值及降至法定安全线以下所需时间。聚会后自查是否适合开车、酒驾风险自测、代驾决策参考。所有计算在浏览器内完成,饮酒数据不上传服务器。
应酬喝了 3 瓶啤酒,不确定 4 小时后能否开车。输入饮酒量和体重,工具给出当前血液酒精浓度和完全代谢所需时间。用户根据结果判断是否达到酒驾标准,避免冒险上路或过度等待。
昨晚聚会喝了半斤白酒,今早要开车上班。工具根据饮酒量和代谢时间计算晨间酒精残留浓度,帮助判断是否仍处于酒驾风险期。避免“以为睡一觉就没事”的常见误判。
同事劝酒时说“喝一杯没事,等会儿打车”,但实际可能叫代驾或次日需要用车。输入当前饮酒量,工具显示酒精代谢曲线,明确告知“2 小时后仍超标”“完全代谢需 6 小时”,用数据说服对方。
叫了代驾但不确定自己是否已达标,或想确认代驾到达时自己是否仍超标。输入饮酒量和已过时间,工具给出实时酒精浓度,帮助判断是否需要继续等待或让代驾多等一会儿。
商务晚宴上喝了 2 杯红酒,结束后要自己开车回家。输入饮酒量和体重,工具显示当前酒精浓度是否超过 20mg/100ml(酒驾标准),并给出建议等待时间,避免因“只喝了一点”而忽略法律风险。
| 维度 | 本工具 | 竞品 A: BACtrack 官网计算器 | 传统方法 |
|---|---|---|---|
| 数据隐私 | 纯浏览器计算,输入数据不上传服务器 | 输入数据需提交至服务器端计算 | 依赖人工询问或纸质表格,隐私无保障 |
| 处理速度 | 输入即出,毫秒级响应 | 需等待页面加载及服务器响应,约 2-5 秒 | 需人工查阅图表或公式计算,耗时数分钟 |
| 离线可用性 | 完全离线,断网也可使用 | 必须联网,断网无法访问 | 完全离线(依赖纸质资料) |
| 输入灵活性 | 支持自定义酒精浓度(1-100%),单位可选 | 通常固定为常见酒类预设值,自定义能力弱 | 需手动换算单位,易出错 |
| 输出维度 | 同时显示 BAC 数值、法律超标线、预估醒酒时间 | 仅显示 BAC 数值,无醒酒时间预估 | 仅能估算 BAC,无法精确计算醒酒时间 |
| 使用成本 | 免费,无广告 | 免费但有广告,部分高级功能需付费 | 免费,但需掌握专业知识 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 啤酒 500ml 2瓶 体重70kg 饮酒后1小时 | 血液酒精浓度:0.048% | 醒酒时间:约3小时 | 建议等待时间:3.5小时 | 典型场景:常见啤酒饮用量,中等体重 |
| 白酒 52度 150ml 体重60kg 饮酒后0.5小时 | 血液酒精浓度:0.092% | 醒酒时间:约6.5小时 | 建议等待时间:7小时 | 典型场景:高度白酒,小体重女性 |
| 红酒 12度 250ml 体重80kg 饮酒后2小时 | 血液酒精浓度:0.031% | 醒酒时间:约2小时 | 建议等待时间:2.5小时 | 典型场景:标准红酒饮用量,较大体重 |
| 啤酒 500ml 0瓶 体重70kg 饮酒后1小时 | 血液酒精浓度:0.000% | 醒酒时间:0分钟 | 建议等待时间:0分钟 | 边界 case:输入0瓶,测试零输入处理 |
| 白酒 60度 500ml 体重50kg 饮酒后0小时 | 血液酒精浓度:0.240% | 醒酒时间:约17小时 | 建议等待时间:18小时 | 边界 case:极端高浓度,小体重立即测量 |
| 啤酒 500ml 1瓶 体重120kg 饮酒后3小时 | 血液酒精浓度:0.006% | 醒酒时间:约0.5小时 | 建议等待时间:1小时 | 边界 case:大体重+长时间后测量,接近归零 |
| 米酒 15度 300ml 体重65kg 饮酒后1.5小时 | 血液酒精浓度:0.036% | 醒酒时间:约2.5小时 | 建议等待时间:3小时 | 易错 case:用户常忽略低度酒也含酒精 |
| 啤酒 500ml 3瓶 体重70kg 饮酒后0.5小时 | 血液酒精浓度:0.072% | 醒酒时间:约5小时 | 建议等待时间:5.5小时 | 易错 case:多瓶连续饮用,峰值更高 |
啤酒喝了 2 杯 → 输入 300ml啤酒杯通常 250-500ml;白酒杯 15-30ml;葡萄酒杯 120-180ml。按实际杯型输入不同酒类标准杯容量差异巨大(啤酒杯≈白酒杯 10 倍),统一按 150ml 算会导致酒精量估测偏差 3-10 倍
喝了 2 瓶青岛啤酒(8°P)→ 输入 5% 酒精度青岛啤酒原麦汁浓度 8°P 对应酒精度约 3.1%vol;输入 3.1% 而非 5%原麦汁浓度(°P)≠ 酒精度(%vol);8°P≈3.1%vol,10°P≈4.0%vol,12°P≈4.7%vol。直接用°P 值会高估酒精量 60%
喝下 300ml 啤酒后立即输入“饮酒后 0 分钟”饮酒后至少等 30-60 分钟再测,此时酒精已完全进入血液酒精经胃和小肠吸收需 30-120 分钟达到血峰;刚喝完时血液酒精浓度接近 0,测出来无意义
空腹喝 3 两白酒,输入“饭后 2 小时”空腹选“空腹(吸收快)”,饭后 1 小时内选“饭后(吸收慢)”空腹时酒精吸收率是饱腹的 2-3 倍,血峰浓度更高、出现更快;不区分会导致醒酒时间低估 1-2 小时
算出 19mg/100ml → 认为完全合法中国标准:20-80mg/100ml=酒驾,≥80mg/100ml=醉驾;19mg/100ml 虽未达酒驾标准,但个体差异和执法仪器误差可能触发处罚法规红线是 20mg/100ml,但呼气式酒精检测仪误差±5mg/100ml;建议留出安全余量,低于 15mg/100ml 再考虑驾驶
算出 6 小时后酒精归零 → 6 小时后开车醒酒时间是基于平均代谢率(15-20mg/100ml/h)的估算值;实际代谢率受年龄、性别、肝功能、药物影响个体代谢率差异可达 ±50%;计算结果应视为“最早可能归零时间”,建议额外等待 1-2 小时作为安全缓冲
体重 140 斤 → 输入 140体重 140 斤 = 70 公斤 → 输入 70Widmark 公式中体重单位是公斤;用市斤会导致酒精分布体积翻倍,血液酒精浓度低估约 50%
先喝 2 两白酒(56%),再喝 3 瓶啤酒(4%)→ 只输入白酒分别输入白酒 100ml×56% + 啤酒 1500ml×4%,或合并为总酒精量 100×0.56 + 1500×0.04 = 116g 纯酒精不同酒类酒精总量需累加;只算一种酒会严重低估实际血液酒精浓度,尤其白酒+啤酒组合常见
公式推导 · 流程图解 · 依据出处
BAC = (A × 5.14 / (W × r)) - (0.015 × T)
BAC — 血液酒精浓度(g/dL)A — 纯酒精摄入量(盎司)W — 体重(磅)r — 酒精分布系数(男0.73,女0.66)T — 饮酒后经过时间(小时)一名体重160磅的男性,2小时内喝下3瓶啤酒(每瓶12oz,酒精度5%)。纯酒精A=3×12×0.05=1.8oz,W=160,r=0.73,T=2。BAC=(1.8×5.14/(160×0.73))-(0.015×2)=0.079-0.03=0.049g/dL。约等于0.05%,低于美国法定酒驾标准0.08%。
基于Widmark公式(1932年提出,经现代法医学修正),适用于标准酒精代谢速率(0.015g/dL/h)。不适用于空腹饮酒、肝功能异常者或同时服用药物人群,误差可达±0.02g/dL。数据来源:NHTSA(美国国家公路交通安全管理局)法医学指南。
3 种主流语言 · 复制即用
import math
def bac_calc(grams_alcohol, body_weight_kg, gender, hours_since_drink):
"""
估算血液酒精浓度 (BAC) 和醒酒时间
- grams_alcohol: 摄入酒精克数
- body_weight_kg: 体重(kg)
- gender: 'male' 或 'female'
- hours_since_drink: 饮酒后经过的小时数
"""
# Widmark 公式:r 值(体液分布系数)
r = 0.68 if gender == 'male' else 0.55
# 理论 BAC(g/L),除以 10 转 %
bac = (grams_alcohol / (body_weight_kg * r) - 0.015 * hours_since_drink) / 10
bac = max(bac, 0.0) # 不能为负
# 醒酒时间:假设代谢率 0.015%/h,降到 0 所需小时
sober_hours = bac / 0.015 if bac > 0 else 0
return round(bac, 4), round(sober_hours, 1)
# 示例:70kg 男性,2 小时内喝 3 瓶啤酒(约 40g 酒精)
bac, hours = bac_calc(40, 70, 'male', 2)
print(f"当前 BAC: {bac}%")
print(f"预计醒酒还需: {hours} 小时")
# 输出:当前 BAC: 0.054%
# 预计醒酒还需: 3.6 小时package main
import (
"fmt"
"math"
)
// bac 计算血液酒精浓度和醒酒时间
func bac(gramsAlcohol, weightKg float64, gender string, hoursSinceDrink float64) (float64, float64) {
var r float64
if gender == "male" {
r = 0.68
} else {
r = 0.55
}
// Widmark 公式,结果转为 %
bac := (gramsAlcohol/(weightKg*r) - 0.015*hoursSinceDrink) / 10.0
if bac < 0 {
bac = 0
}
// 代谢率 0.015%/h
soberHours := bac / 0.015
if soberHours < 0 {
soberHours = 0
}
return math.Round(bac*10000) / 10000, math.Round(soberHours*10) / 10
}
func main() {
// 示例:60kg 女性,1 小时内喝 2 杯葡萄酒(约 30g 酒精)
bacVal, sober := bac(30, 60, "female", 1)
fmt.Printf("当前 BAC: %.4f%%\n", bacVal)
fmt.Printf("预计醒酒还需: %.1f 小时\n", sober)
// 输出:当前 BAC: 0.0759%
// 预计醒酒还需: 5.1 小时
}/**
* 估算血液酒精浓度 (BAC) 和醒酒时间
* @param {number} gramsAlcohol - 摄入酒精克数
* @param {number} weightKg - 体重(kg)
* @param {'male'|'female'} gender - 性别
* @param {number} hoursSinceDrink - 饮酒后经过的小时数
* @returns {{ bac: number, soberHours: number }}
*/
function calcBAC(gramsAlcohol, weightKg, gender, hoursSinceDrink) {
const r = gender === 'male' ? 0.68 : 0.55;
// Widmark 公式,结果转为 %
let bac = (gramsAlcohol / (weightKg * r) - 0.015 * hoursSinceDrink) / 10;
bac = Math.max(bac, 0);
// 代谢率 0.015%/h
const soberHours = bac > 0 ? bac / 0.015 : 0;
return {
bac: Math.round(bac * 10000) / 10000,
soberHours: Math.round(soberHours * 10) / 10
};
}
// 示例:80kg 男性,3 小时内喝 5 罐啤酒(约 60g 酒精)
const result = calcBAC(60, 80, 'male', 3);
console.log(`当前 BAC: ${result.bac}%`);
console.log(`预计醒酒还需: ${result.soberHours} 小时`);
// 输出:当前 BAC: 0.065%
// 预计醒酒还需: 4.3 小时9 个高频疑问