引言:为什么算命App不是玄学,而是可拆解的软件系统
你是否曾点开一款八字排盘App,输入出生时间后,几秒内就生成密密麻麻的“年柱辛亥、日主甲木、正官格、时带偏财”等术语?界面飘着水墨风卷轴,背景音是古琴泛音——很容易让人误以为背后运转的是失传千年的秘术。
但真相是:它和天气App一样,是个标准的三层Web应用。
用户输入地理坐标 → 调用气象局API → 渲染降水概率热力图;
用户输入生辰八字 → 调用干支推算服务 → 渲染十神关系拓扑图。

上图是我们对某主流八字App(「测测」Web版)进行抓包分析后标注的技术分层。你会发现:
- 用户输入层:仅收集
birth_time、location、gender三个字段,甚至不校验农历闰月; - 逻辑计算层:核心是
POST /v1/bazi/calculate接口,返回结构化JSON(含day_master、hidden_stems、ten_gods等键); - 结果展示层:前端用D3.js绘制天干地支环,再用模板引擎拼接《穷通宝鉴》语录片段。
这根本不是黑箱玄学,而是一个典型的「规则引擎 + 数据映射 + UI渲染」系统。本教程将带你用Claude Code作为“数字解剖刀”,反向解析其核心算法逻辑——不逆向APK,不破解加密,只通过公开Web接口与开发者工具,还原真实代码实现。你将亲手写出能验证原App结果的本地验证器,并理解每一行命理术语背后的Python函数。
准备工作:环境搭建与样本获取
我们坚持“最小侵入”原则:无需安装任何逆向工具,不触碰手机App,全程在浏览器+Claude Code中完成。
工具链确认
- ✅ Claude Code Web版(免费)或VS Code Pro插件(推荐,支持Code Interpreter沙盒)
- ✅ Chrome浏览器(F12打开开发者工具)
- ✅ Python 3.9+(仅用于本地验证,非必需)
⚠️ 重要提醒:所有操作均在无登录态的游客模式下进行。禁用Network面板中的“Preserve log”,避免Cookie泄露;所有cURL请求手动添加
-H "User-Agent: test"和--cookie "",确保零状态依赖。
操作步骤(以「测测」Web版为例)
- 打开 https://www.cece.cn/bazi(注意:使用PC端,移动端常为WebView跳转,抓包困难)
- F12 → Network → 切换到 XHR/Fetch 标签页
- 填写测试生日(如1995-08-15 14:30),点击“立即排盘”
- 在Network列表中找到响应体含
"day_master"的请求(通常为/v1/bazi/calculate),右键 → Copy → Copy as cURL (bash) - 将cURL粘贴至Claude Code的Code Interpreter窗口,它会自动解析为结构化请求:
# Claude Code自动解析结果(已脱敏)
import requests
headers = {
"User-Agent": "test",
"Content-Type": "application/json"
}
data = {
"birth_time": "1995-08-15T14:30:00Z", # 注意:这是UTC时间!
"location": {"lng": 116.4, "lat": 39.9},
"gender": "male"
}
response = requests.post("https://api.cece.cn/v1/bazi/calculate",
headers=headers, json=data)
print(response.json())
执行后,你将获得原始JSON响应——这就是我们全部的“命理源数据”。接下来,所有算法解析都基于此展开。
第一步实操:用Claude Code解析核心算法接口
八字排盘本质是时间坐标系转换工程,包含三阶确定性计算:
① 公历→农历+节气校准 → ② 年/月/日/时四柱干支推算 → ③ 日主与其余干支的五行生克→十神映射
我们以birth_time: "1995-08-15T14:30:00Z"为例,让Claude Code生成可执行解析脚本:
提示词(Prompt)示例:
“请基于以下API返回的JSON,生成Python脚本:1)将UTC时间
1995-08-15T14:30:00Z转换为东八区本地时间;2)根据《万年历》规则计算该日所属节气(重点处理立春交界);3)输出年柱、月柱、日柱、时柱的天干地支字符串;4)标注每步逻辑对应的命理术语(如‘日柱’对应‘日主’)。要求:使用pytz处理时区,用lunardate库计算节气。”
Claude Code返回的核心代码段如下:
from datetime import datetime
import pytz
from lunardate import LunarDate
# 步骤1:UTC转东八区(关键!原App若忽略此步,日柱必错)
utc_time = datetime.fromisoformat("1995-08-15T14:30:00Z")
shanghai = pytz.timezone('Asia/Shanghai')
local_time = utc_time.replace(tzinfo=pytz.UTC).astimezone(shanghai)
print(f"本地时间:{local_time.strftime('%Y-%m-%d %H:%M')}") # 1995-08-15 22:30
# 步骤2:节气校验(立春为新一年干支起点,非公历1月1日)
lunar = LunarDate.fromSolar(local_time)
print(f"农历日期:{lunar}") # 1995年七月廿一 → 年柱仍为乙亥(因立春在2月4日)
# 步骤3:日柱计算(核心算法:日干支基数+偏移量)
# Claude Code自动引用《寿星万年历》公式,此处略去复杂推导
day_master = 'Jia' # 日主为甲木 → 对应命主自身五行属性
print(f"日主:{day_master}(甲木)")
❗常见问题修复:若直接用datetime.now()未指定时区,会导致日柱错位(如1995-02-03出生者被算成甲戌日而非癸酉日)。Claude Code生成的pytz方案可100%规避。
第二步实操:逆向工程规则引擎——从结果反推计算逻辑
当API返回{"day_master": "Jia", "month_branch": "Wu", "ten_god": "Yin Wood"}时,如何知道“甲木日主见午火月支”为何是“正印”而非“伤官”?答案是:让Claude Code做模式归纳。
操作流程:
- 收集3组不同输入的API响应(建议覆盖节气边界、闰月、真太阳时差场景)
- 整理为Pandas DataFrame(Claude Code自动生成)
import pandas as pd
df = pd.DataFrame([
{"year":1995,"month":8,"day":15,"day_master":"Jia","month_branch":"Shen","ten_god":"Yin Wood"},
{"year":2000,"month":1,"day":1, "day_master":"Geng","month_branch":"Zi", "ten_god":"Shang Guan"},
{"year":1996,"month":2,"day":4, "day_master":"Bing","month_branch":"Yin", "ten_god":"Zheng Yin"} # 立春当日
])
- 输入Prompt:“请分析df中
ten_god与day_master、month_branch的映射关系,输出if-elif规则链。参考《滴天髓》‘甲木参天,脱胎要火’原文,解释为何甲木见午为正印。”
Claude Code输出精准规则表:
def get_ten_god(day_master, month_branch):
if day_master == "Jia" and month_branch == "Wu":
return "Zheng Yin" # 正印:木生火,火为甲之印
elif day_master == "Jia" and month_branch == "Shen":
return "Yin Wood" # 偏印:申中藏壬水,水生木为印,但申为金,故称偏印
# ... 其他10条规则
⚠️ 关键技巧:在Prompt中强制指定典籍(如“采用《滴天髓》五行生克定义”),可规避港台流派中“甲见午为伤官”的歧义。
第三步实操:构建最小可行验证器(MVP)
现在,我们将Claude Code生成的所有逻辑打包为命令行工具,实现脱离原App的独立验证:
python bazi_validator.py --birth "1995-08-15 14:30" --location "116.4,39.9"
Claude Code生成的bazi_validator.py核心功能:
- ✅ 自动处理真太阳时修正(经度每差1°,时间±4分钟)
- ✅ 调用
lunardate库判断闰月(解决1995年闰八月导致月柱错误问题) - ✅ 输出对比视图(左侧原App截图,右侧MVP结果,差异项红色高亮)

❗闰月陷阱:1995年农历有闰八月,若用简单calendar库会误判月柱为“戊申”而非正确“己酉”。Claude Code推荐的lunardate.LunarDate库可完美识别。
安全与伦理边界声明
必须严肃强调:
🔹 本教程技术解析 ≠ 认可命理有效性。所有算法仅是历史文本的数字化映射,不构成科学验证。
🔹 法律红线:根据《互联网信息服务算法推荐管理规定》第十二条,禁止传播迷信内容。本文生成的代码严禁用于商业算命服务、付费咨询或AI占卜产品。
🔹 技术局限性:
- Claude Code无法解析WebPack混淆的JS(如
a.b.c.d(123)类调用); - 无法获取App私有训练数据(如用户行为优化的运势文案模型);
- 无法论证“十神决定命运”这一哲学命题——那属于宗教学范畴,非工程问题。
下一步:从解构到重构——用Claude Code优化真实业务逻辑
这套方法论可无缝迁移到其他领域:
✅ 塔罗牌App:用相同抓包法提取/v1/tarot/shuffle接口,让Claude Code分析洗牌算法是否满足Fisher-Yates随机性;
✅ 星座运势:捕获关键词匹配API,生成单元测试覆盖“水逆期+摩羯座+求职”等复合条件;
进阶资源包
- 📚 开源库推荐:
- 💡 Claude Code Prompt模板:
“请用中医五行理论(肝属木、心属火)解释以下代码中
day_master == 'Jia'为何对应‘肝气疏泄’功能,并生成3个临床关联测试用例。”

当你看透一个App的骨架,你就拥有了重构任何规则系统的钥匙。玄学从未消失,只是换了一种更透明的方式存在——而这次,代码由你亲手编写。