AIGC标识 20000mAh 的充电宝能带上飞机吗?按 Wh 算一遍,5 个容量档实测

图 1:充电宝乘机自查工具首屏。上面是额定容量 20000 mAh 与电芯电压 3.7V 两个输入框,快捷档位一排 5000 到 30000 mAh,下面绿色判定条写着「可随身携带」,再下面是五步计算过程:20000 × 3.7 = 74000.00,74000.00 ÷ 1000 = 74.00 Wh

20000mAh 的充电宝,航班上的额定能量是 74Wh,不是 100Wh。

差的那 26Wh,来自你乘的电压。

民航查的从来不是 mAh,是 Wh。

决定能不能带上飞机的,是「容量 × 电压 ÷ 1000」这一步。

我把这条规则写成了一个单文件网页,双击就能开,不联网,不引第三方库。

下面每个数字都能在页面上改两个输入框复算出来。

一、为什么值得看:100Wh 是条换算出来的线,不是容量线

民航局的规则是三档。

额定能量不超过 100Wh,随身携带,不需要批。

超过 100Wh 但不超过 160Wh,得航空公司批准,而且每人只能带 2 个。

超过 160Wh,禁止随身也禁止托运。

麻烦在于铭牌上印的是 mAh,规则用的是 Wh。

按常见的电芯电压 3.7V 算,100Wh 大约是 27027mAh。

所以 20000mAh 那类充电宝,74Wh,离红线还差 26Wh。

27000mAh 标称的正好是 99.9Wh,几乎贴着线站。

要是换成输出电压 5V 去乘,20000 × 5 ÷ 1000 = 100Wh,凭空多出 26Wh。

同一个充电宝,一个算法说可随身,另一个算法说卡在红线上。

这就是我把这个页面做出来的原因:把口径摆在明面上。

顺手说一句在机场被问爆的另外两条。

充电宝严禁托运,只能随身。

标识不清、标不出额定能量又算不出来的充电宝,直接不让带。

2025 年 6 月 28 日起,境内航班还多了一条:没有 3C 标识、3C 标识不清晰、以及被召回型号或批次的充电宝,一律禁带。

二、这个工具做了什么

需求一句话就交代完了:做一个「充电宝能不能带上飞机」的查询页,输入 mAh 和 V 实时算 Wh 并判定,内置常见容量档,把计算过程、对比图和自查清单都放上去。

页面上有四块。

第一块是输入与判定,两个输入框加一排快捷档位,下面立刻给出结论和五步计算过程。

第二块是条形图,把 5000 到 30000 mAh 五个档位按 3.7V 算出的 Wh 并排放,图上插着 100Wh 和 160Wh 两条红线。

图 2:五个容量档的 Wh 横向条形图。5000 mAh 是 18.5Wh、10000 mAh 是 37.0Wh、20000 mAh 是 74.0Wh、27000 mAh 是 99.9Wh,四条都是绿色;30000 mAh 是 111.0Wh,涂成黄色。100Wh 红线正好落在 20000 和 27000 之后,160Wh 红线在最右边

第三块是口径对照表,把「按电芯 3.7V 算」和「误按输出 5V 算」两列结果并排放在一起。

图 3:口径对照表。五行分别是 5000、10000、20000、27000、30000 mAh,列出按 3.7V 算的 Wh、误按 5V 算的 Wh 和两列判定结果。20000 mAh 那行是 74.0 对 100.0,27000 mAh 那行是 99.9 对 135.0,后者的判定从「可随身」变成了「需批准」

第四块是乘机自查清单,六项,带勾选进度条。

判定函数就三行,规则本身没有歧义:

function judge(Wh){
  if(Wh<=100) return {cls:"v-ok",   title:"✅ 可随身携带",     desc:"额定能量 ≤100Wh,可随身携带,无需特别申报。"};
  if(Wh<=160) return {cls:"v-warn", title:"⚠ 需航空公司批准", desc:"100Wh < 额定能量 ≤160Wh,须经航空公司批准,且每人限带 2 个。"};
  return {cls:"v-bad", title:"🚫 禁止携带", desc:"额定能量 >160Wh,禁止随身或托运携带。"};
}

真正容易错的不是这三行,是喂给它的那个 Wh 是怎么算出来的。

三、实测:五个容量档,12 组用例

五个档位按 3.7V 算出来的结果放在一张表里。

额定容量 按 3.7V 算 判定 误按 5V 算 5V 口径下的判定
5000 mAh 18.5 Wh 可随身 25.0 Wh 可随身
10000 mAh 37.0 Wh 可随身 50.0 Wh 可随身
20000 mAh 74.0 Wh 可随身 100.0 Wh 可随身
27000 mAh 99.9 Wh 可随身 135.0 Wh 需批准
30000 mAh 111.0 Wh 需批准 150.0 Wh 需批准

表格里有两处值得一提的细节。

20000mAh 那一行,按 5V 算是 100.0Wh,判定仍然是「可随身」,因为规则原文写的是「超过 100Wh 才需要批准」,100Wh 整正好还站在里面。

所以口径错的代价在这一行上不是判定翻转,是离红线的距离被抹掉了。

27000mAh 那一行就是真的翻车:99.9Wh 本来贴着线站,按 5V 算成 135.0Wh,直接掉进「需批准」。

我把输入组合逐条跑了一遍,按规则原文核对判定结果。

输入(mAh,V) 算出 页面判定 与规则一致
5000,3.7 18.50 Wh 可随身携带 是
10000,3.7 37.00 Wh 可随身携带 是
20000,3.7 74.00 Wh 可随身携带 是
27000,3.7 99.90 Wh 可随身携带 是
30000,3.7 111.00 Wh 需航空公司批准 是
20000,5 100.00 Wh 可随身携带 是
27000,5 135.00 Wh 需航空公司批准 是
20000,5.2 104.00 Wh 需航空公司批准 是
50000,3.7 185.00 Wh 禁止携带 是
27027,3.7 99.9999 Wh 可随身携带 是
27028,3.7 100.0036 Wh 需航空公司批准 是
100000,3.7 370.00 Wh 禁止携带 是

12 组全部对上,其中最后两条是拿来试边界的。

27027mAh 乘 3.7V 是 99.9999Wh,27028mAh 是 100.0036Wh,一个在线内一个在线外,判定也跟着换。

30000mAh 那档是页面里唯一一个需要批准的常见档位,截图里它是黄条。

图 4:把额定容量改成 30000 mAh 后的判定。顶部判定条从绿色变成黄色,写着「需航空公司批准 100Wh < 额定能量 ≤160Wh,须经航空公司批准,且每人限带 2 个」,计算过程最后一步是「111.00 Wh 在 100~160 之间 → 需航空公司批准」

四、验证与踩坑:空输入被判成了「可随身携带」

这个页面有一处真实的缺陷,我把它留在文章里。

把额定容量这一栏清空,不填任何数字。

页面的判定是绿色的「可随身携带」,计算过程第五步写着「0.00 Wh ≤100 → 可随身携带」。

图 5:失败路径。额定容量输入框被清空,判定条仍然是绿色「可随身携带」,计算过程显示「0 × 3.7 = 0.00」「0.00 ÷ 1000 = 0.00 Wh」「0.00 Wh ≤100 → 可随身携带」。页面没有对空输入做任何校验

也就是说,一个什么都没有的输入,会被它能算的最低能量值包装成合格结论。

最小复现:打开页面,把「额定容量(mAh)」输入框里的 20000 删掉,什么都不填。

根因是这段逻辑里少了一句校验。

const m=parseFloat($("mAh").value)||0;   // 空值和 NaN 一律按 0 处理
const Wh=m*v/1000;

空字符串经 parseFloat 变成 NaN,再被 || 0 兜成 0,于是 0Wh 走进了「≤100Wh 可随身」这一档。

判定函数本身没错,错在它拿到的输入没被检查过。

这个 bug 的坏处不在数字上,在观感上:它给了一个肯定的绿色结论,而正确的做法应该是提示「请输入额定容量」。

我把这条连同另外三种输入一起列进失败路径对照表。

输入 页面表现 是否合理
容量清空 0.00 Wh,绿色「可随身携带」 不合理,应该提示输入为空
容量填 0 0.00 Wh,绿色「可随身携带」 不合理,0 不是有效容量
容量填 100000 370.00 Wh,红色「禁止携带」 合理
电压填 5(20000mAh) 100.00 Wh,绿色「可随身携带」 数值正确,但这是输出口径不是电芯口径

第二处要如实说的是页面自己的一处口径不一致。

对照表下方那段注释写的是「20000mAh 误按 5V 算成 100Wh,会被误判为卡在 100Wh 红线上、需航空公司批准」。

但同一张表里,20000mAh 那一行的 5V 误判列是「可随身」。

两处对 100Wh 整用了不同的边界理解,表格按「超过 100Wh 才需要批准」判,注释按「够到 100Wh 就要批准」写。

按民航局公告原文「额定能量超过 100Wh 但不超过 160Wh,经航空公司批准后方可携带」,表格的判定是对的,注释那句措辞偏严了。

留着它比改掉它有用:这种「同一页里两处对同一条边界的理解不一样」的问题,靠看代码很难发现,得把值喂到边界上才暴露。

五、本地复现

源码在公开仓库,单文件,没有构建步骤:

https://atomgit.com/deli007/demo_park/tree/main/codearts-powerbank-flight-lab

下载后双击 index.html 就能用,或者起一个本地静态服务:

git clone https://atomgit.com/deli007/demo_park.git
cd demo_park/codearts-powerbank-flight-lab
python -m http.server 8080

想自己复核判定,就按第三节那张 12 组用例表逐行填进去对一遍。

27027 和 27028 这两个数字建议单独试,它们是 100Wh 在 3.7V 下的两侧。

六、准备环境:进入码道 Web

浏览器打开码道 Web 版:https://devcloud.cn-north-4.huaweicloud.com/chat?source=dmzntgwlb&sourcead=dmzntgwlb1&invitecode=INV-IXhxk5bwWx_qKSP1FcgSuiOEf6ruDXtjvLFiCH9nMs5dZGLapaSSylwt-cKRj5LoT3MlxikWxy8VhqplfvtQjefQOq31Tbp3R3wYP3K535Cn4XTaUzqqExKPYTWvvw4LijV14IS1torXdTGp7oyXb6SR5VxgYTg50jM,登录后就能在对话窗口里输入需求,不需要装软件。

码道有三种使用方式:WebUI(浏览器对话)、TUI(终端命令行)和桌面 IDE(IDE 插件)。本文用的是 WebUI 版。

这轮发给它的需求是完整的一段:

做一个单文件网页工具,输入额定容量 mAh 与电芯电压 V 实时算出额定能量 Wh 并判定能否带上飞机,内置 5000 到 30000 mAh 五个快捷档位,把计算过程分步展示,用条形图把各档位和 100Wh、160Wh 两条红线画在一起,再做一张 3.7V 与 5V 的口径对照表和一个自查清单。

这段需求里有三句话是刻意加的。

一句是「按民航局规则判定,并写清三档的阈值」,把判定依据钉死。

一句是「做一张口径对照表,说明 20000mAh 用 5V 算会把 74Wh 误算成 100Wh」,等于把最容易错的那个点直接写进需求。

还有一句是「完成后打开预览,让我直接看到运行效果」,省掉了来回问「怎么跑」。

七、使用码道体会

  • 规则类需求要把阈值写进需求里。我只说了「按民航局规则判定」,出来的三档阈值就得我自己核对一遍;把 100 和 160 直接写进去,验收成本立刻降一半。
  • 把自己知道的坑写成需求,比事后改代码省事。「用 5V 算会误算」这句让对照表和注释一开始就有了,虽然那句注释的措辞后来发现偏严。
  • 交付后按输入框逐个试边界,比看代码有效。空输入这个缺陷是清空输入框试出来的,读那几行 JS 时并不觉得有问题。
  • 凡是「用户可能不填」的输入,都要在需求里点名要校验提示。这次没点名,页面就真的没做。
  • 让页面把中间步骤显示出来。这个页面的五步计算过程既是给用户的,也是给我自己复核用的。

八、总结

充电宝能不能带上飞机,答案在 Wh 上,而 Wh 是算出来的,所以真正决定结论的是你用哪个电压去乘。

按电芯 3.7V 算,20000mAh 是 74Wh,可随身;30000mAh 是 111Wh,要航空公司批准且每人限 2 个。

按输出 5V 算,20000mAh 会变成 100Wh,27000mAh 会从 99.9Wh 变成 135Wh 并翻转判定。

规则本身有三档、有一条禁托运、还有 2025 年 6 月 28 日起的 3C 标识要求,页面上都摆着。

最后提醒一句:本文的结论按民航局公告原文和常见电芯电压推导,实际执行以航空公司和安检现场为准;Wh 认不出来的充电宝,安检有理由直接拦下。

posted @ 2026-11-04 07:58  新科技观察员  阅读(9)  评论(0)    收藏  举报