이 포스트에서는 파이썬으로 위드마크 공식을 구현하는 코드를 간략하게 작성합니다.
가수 김호중의 음주운전 사건이 언론에 오르며 떠들썩한 가운데 ‘위드마크 공식’이라는 용어가 나와 화제가 되기도 했습니다. 위드마크 공식이란 1931년 스웨덴의 생리학자 에릭 마테오 프로셰 위드마크(Erik Matteo Prochet Widmark)가 고안한 공식으로, 음주운전 후 너무 오랜 시간이 지나 정확한 혈중 알코올 농도를 알 수 없을 경우 음주운전 시점의 혈중 알코올 농도가 대략 어느 정도인지 추정할 수 있는 공식입니다.
우리나라에서 사용하는 이를 변형한 것이며, 구체적으로는 다음과 같습니다.
C = (0.7A)÷(10PR) - (βt)
A는 음주자가 마신 술의 양(ml)에 술의 도수에서 100을 나눈 값을 곱하고 다시 0.7894(알코올의 비중)를 곱합니다. 우리나라에서는 알코올의 체내 흡수율이 70%인 것으로 보고 여기에 다시 0.7을 곱한 값을 적용합니다.
P는 음주자의 체중(kg), R은 음주자의 성별 계수(남성 0.86, 여성 0.64)입니다. 위의 0.7A를 10×P×R 값으로 나눕니다. 이 값을 최고혈중농도로 추산합니다.
β는 시간당 혈중농도 감소량(평균 0.015%p)이며 t는 최고혈중농도로부터 경과한 시간입니다.
예를 들어, 70kg의 남성이 소주 1병(360ml)를 마셨을 때 이 공식에 의거한 최고혈중농도는 360×19÷100×0.7894×0.7=37.796…, 10×70×0.86=602, 37.796…÷602=0.06278…이므로 대략 0.063입니다.
그러면, 이 시점으로부터 3시간이 지났을 때의 혈중농도 추정치를 계산하면, 0.015×3=0.045이므로 앞의 0.063에서 이 값을 빼면 0.018입니다.
[주의] 실제 혈중 알코올 농도는 음주자의 체질에 따라 차이가 있습니다. 위드마크 공식에 의한 산출치는 어디까지나 추정치일 뿐이므로 참고용으로만 이용하시기 바랍니다.
이 공식을 파이썬으로 구현하면 다음과 같습니다.
# 70kg의 남성이 소주 1병을 마신 후 3시간이 지났을 때 혈중 알코올 농도는? Drunken = 360 # 소주 1병은 360ml ABV = 19 # 소주 도수는 19도 Weight = 70 Rate = 0.86 Elapsed = 3 BC = (Drunken * (ABV / 100) * 0.7894 * 0.7) / (10 * Weight * Rate) - (0.015 * 3) print( round(BC, 3) ) # 0.018