引言:为什么算命App不是玄学,而是可拆解的软件系统

你是否曾点开一款八字排盘App,输入出生时间后,几秒内就生成密密麻麻的“年柱辛亥、日主甲木、正官格、时带偏财”等术语?界面飘着水墨风卷轴,背景音是古琴泛音——很容易让人误以为背后运转的是失传千年的秘术。

但真相是:它和天气App一样,是个标准的三层Web应用
用户输入地理坐标 → 调用气象局API → 渲染降水概率热力图;
用户输入生辰八字 → 调用干支推算服务 → 渲染十神关系拓扑图。

算命App三层架构示意图:用户输入层(表单+定位)、逻辑计算层(API调用+规则引擎)、结果展示层(SVG命盘+HTML解读)

上图是我们对某主流八字App(「测测」Web版)进行抓包分析后标注的技术分层。你会发现:

  • 用户输入层:仅收集birth_timelocationgender三个字段,甚至不校验农历闰月;
  • 逻辑计算层:核心是POST /v1/bazi/calculate接口,返回结构化JSON(含day_masterhidden_stemsten_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版为例)

  1. 打开 https://www.cece.cn/bazi(注意:使用PC端,移动端常为WebView跳转,抓包困难)
  2. F12 → Network → 切换到 XHR/Fetch 标签页
  3. 填写测试生日(如1995-08-15 14:30),点击“立即排盘”
  4. 在Network列表中找到响应体含"day_master"的请求(通常为/v1/bazi/calculate),右键 → Copy → Copy as cURL (bash)
  5. 将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做模式归纳

操作流程:

  1. 收集3组不同输入的API响应(建议覆盖节气边界、闰月、真太阳时差场景)
  2. 整理为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"}  # 立春当日
])
  1. 输入Prompt:“请分析df中ten_godday_mastermonth_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结果,差异项红色高亮)

MVP验证器对比图:左侧为「测测」App截图,右侧为本地脚本输出,中间箭头标注「时柱差异:原App未校准真太阳时,导致时干错1位」

闰月陷阱: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,生成单元测试覆盖“水逆期+摩羯座+求职”等复合条件;

进阶资源包

  • 📚 开源库推荐:
    • xuanxue:纯Python八字推算(含节气校准)
    • lunardate:权威农历转换
    • zhdate:支持闰月的农历工具
  • 💡 Claude Code Prompt模板:

    “请用中医五行理论(肝属木、心属火)解释以下代码中day_master == 'Jia'为何对应‘肝气疏泄’功能,并生成3个临床关联测试用例。”

技术解构思维导图:中心为「算命App」,分支延伸至「天气预报」「金融风控」「医疗诊断」等所有规则驱动型系统

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