问真八字 · 算法复刻说明

问真八字 · 算法复刻说明

最后更新:2026-11-11 样本量:9841 条节气样本 + 7651 条全字段样本(1900–2030)

一、结论先行

核心排盘已复刻,起运的秒位受采样精度限制。

维度 进度
API 返回字段(26 个业务字段) 19 个 100% 一致
四柱神煞(59 种) 52 种一致(88%),零假阳性
起运 qiyunarr 年 99.96% / 月 99.39% / 日 98.83% / 时 93.49% / 分 87.56% / 秒 67.82%
六位全对 65.05%
交运描述串 77.2%
大运神煞 逐步 80.4%
胎对八字 / 小运 / 大运排列 100%

问真的核心算法跑在服务端,全程没有接触源码。本实现是用公开命理公式做黑盒拟合, 再用真实 API 样本逐字段验证。所有数字都可用文末的脚本复现。


二、四柱神煞:公式优先

59 种里有 52 种已对齐。其中 34 种是代数公式,18 种是固定枚举, 7 种尚未破解。

2.1 十二长生体系

一切的锚点是禄:

禄神 = 五行长生位 + 3
日干 五行 长生 +3 = 禄
甲 木 亥 寅
丙 火 寅 巳
戊 土 寅 巳
庚 金 巳 申
壬 水 申 亥

阴干是这里最容易踩坑的地方。 按传统十二长生逆推,乙的禄应是申, 但问真实测是卯。真实规则是:

阴干禄 = 同五行阳干禄 + 1
乙卯  丁午  己午  辛酉  癸子

其余日干系神煞都是禄的偏移:

羊刃 = 禄 + 1(阳干)/ 禄 - 1(阴干)
飞刃 = 羊刃 + 6
文昌 = 禄 + 3
国印 = 禄 + 8
金舆 = 禄 + 2
天厨 = 食神之禄(日干 +2 的天干,取其禄)

以上 7 种经 3572 条样本零违例验证。

2.2 三合体系

7 种神煞共用一个锚点——将星:

将星 = (-3 × (支 mod 4)) mod 12

其余全是固定偏移:

神煞 偏移
驿马 将星 + 2
桃花 将星 − 3
亡神 将星 − 1
劫煞 将星 + 5
灾煞 将星 + 6
华盖 将星 + 4

一个公式代替了 7 张 12 项的表。

分柱规则上有个细节:将星/华盖是交叉互查(年柱←日支局、日柱←年支局、 月时←两局皆可),灾煞是自坐(年柱看自己),而桃花/驿马/亡神/劫煞是两局取并集。

2.3 年支线性平移

红鸾 = 3 - 支          天喜 = 红鸾 + 6
披麻 = 支 - 3          丧门 = 支 + 2
吊客 = 支 - 2          勾绞 = 支 + 3
天医 = 月支 - 1
孤辰 = 2 + 3 × ((支+1)//3 mod 4)
寡宿 = 孤辰 - 4

注意:披麻、勾绞、红鸾、天喜、丧门、吊客都不查年柱,只查月/日/时。 孤辰、寡宿则四柱都查。

2.4 贵人用口诀,不是枚举

天乙贵人只要 5 行判断:

甲戊庚 → 丑未      乙己 → 子申      丙丁 → 亥酉
辛 → 午寅          壬癸 → 卯巳

太极贵人按 干 // 2 分五组。

2.5 纯公式

月德   = 月支三合局 → 阳干(申子辰壬 / 寅午戌丙 / 巳酉丑庚 / 亥卯未甲)
月德合 = 月德的对合天干
天德   = 月支 → 天干或地支(寅丁 卯申 辰壬 巳辛 午亥 未甲 申癸 酉寅 戌丙 亥乙 子巳 丑庚)
天德合 = 天德为干取对合干 / 为支取六合支
德秀   = 柱干 ∈ 月支三合局的德秀天干集
空亡   = 地支 ∈ (年柱旬空 ∪ 日柱旬空)
元辰   = 年支按「阳男阴女进、阴男阳女退」移动一位后取冲(不查年柱)
金神   = 日柱或时柱 ∈ {乙丑, 己巳, 癸酉}
拱禄   = 日时两柱夹拱禄位,仅 5 组:戊辰/戊午、丁巳/丁未、癸丑/癸亥、癸亥/癸丑、己未/己巳

德秀贵人的推导值得记一笔:数据里它对每一柱的标注率都是 100% 或 0%, 零冲突——说明是纯确定性规则。按「柱干 × 月支」提取得 54 个命中键, 归并后发现就是月支三合局对应的「德」+「秀」两组天干:

月支局 德 秀 合集
申子辰(水) 壬癸戊己 丙辛甲己 甲丙戊己辛壬癸
寅午戌(火) 丙丁 戊癸 丙丁戊癸
巳酉丑(金) 庚辛 乙庚 乙庚辛
亥卯未(木) 甲乙 丁壬 甲乙丁壬

2.6 保留为枚举的 18 种

这些本身没有代数式,是离散的干支对应:

强行拟合等于把结果抄一遍,不如如实保留。

2.7 未破解 7 种

童子煞、学堂、词馆、正学堂、正词馆、天罗地网、三奇贵人。

已知事实(但不足以定规则):

神煞 已知特征
童子煞 只标日/时柱(年/月柱 0 例);每命局标 1 次占 85%、2 次占 15%;日时同支时只出现「都标」或「都不标」,从不「只日」或「只时」;地支卯辰子命中率 78–83%,申亥丑 26–35%。已排除 6 条路径(见下表)
学堂 年纳音决定主支(金寅/木申/水申/火寅/土巳),只查月日时;8249 条样本里年柱 0 例;每命局最多标 2 次
词馆 同上,主支为金巳/木亥/水亥/火巳/土申
正学堂/正词馆 学堂/词馆的子集,条件更严
天罗地网 月柱占 55%,年日各 16%;与月支、日支的相邻关系有关
三奇贵人 10 例全部标日柱,样本太少

童子煞已排除的 6 条路径(记录下来避免重复试错):

假设 违例数 结论
年纳音 → 双地支(金木午卯/水火酉戌/土辰巳) 3063 传统纳音法不成立
任意地支集合(穷举 2–6 元组) 全部 >500 不存在纯地支判据
年纳音 × 月支 二维表 — 各组合命中率均 60–75%,无区分度
日柱干支 / 时柱干支 混合 45–60 键 单柱不足以判定
日时两柱「取先/取后」 1535 不是简单的取先取后
传统季节口诀(春秋寅子/冬夏卯未辰) 2662 传统口诀不成立

月支单独看,各支命中率都在 55–63% 之间,没有区分度—— 说明童子煞的依据既不是月支,也不是年纳音,而是某个尚未定位的二维/三维组合。


三、起运换算

3.1 名义秒体系

问真用名义 360 天/年,不是回归年:

单位 名义秒
1 年 360 × 86400 = 31,104,000
1 月 30 × 86400 = 2,592,000
1 天 86400
1 时 3600
1 分 60
total = round(距节真实秒 * 120) - bias
y,  rem = divmod(total, 360*86400)
mo, rem = divmod(rem, 30*86400)
d,  rem = divmod(rem, 86400)
h,  rem = divmod(rem, 3600)
mi, rem = divmod(rem, 60)
sec = rem

3.2 四象限偏移(关键)

bias = 30 × (阳干 ? +1 : -1) × (顺行 ? +1 : -1)

推导过程:先发现 50.4% 的样本恰好差 +30 名义秒,且按节气名分组时 除立春外 11 个节的「差 0」比例都是 0.0%——整齐到不可能是噪声。

进一步用加密样本(男女各半、每节气 20 条)分组统计,发现符号会翻转:

年干 顺/逆 raw − api 均值 修正量
阳 顺 +0.2275s 减 30
阳 逆 −0.2268s 加 30
阴 顺 −0.2663s 加 30
阴 逆 +0.2341s 减 30

四象限绝对值都约 0.25 秒 = 30 名义秒。

踩过的坑:一度以为是「性别差异」。因为早期采集脚本全写死 s=1(男), 而男方样本恰好集中在阳年干、女方在阴年干,把年干阴阳误当成了性别。 补上性别均衡后四象限规律才显形。

3.3 节气 δ:不是常数,是斜线

问真的节气时刻与我用的 VSOP87 算法有偏差 δ。实测发现 δ 随节气内时间线性漂移:

δ(t) = δ0 + K × (t - T节)
K = -0.00280055 秒/天(约 -2.8 毫秒/天)

代表样本(1900 惊蛰):

距节天数 δ
−27.77 +2.919s
−23.77 +2.911s
−18.77 +2.894s
−2.00 +2.844s

斜率残差中位 2.63 毫秒,说明模型成立。

为什么不能只存标量 δ:采样点散布在节气前后 2–11 天,标量 δ 实际是 「采样时刻的 δ」。当常数用会引入 ±16 毫秒误差,经名义秒 ×120 放大成 1.9 秒, 秒位直接翻转。这正是早期把表从 594 扩到 1672 条、秒位反而从 40% 跌到 0.67% 的原因 ——不是表不够大,是模型错了。

3.4 δ 表用区间求交

qiyunarr 逐位截断,意味着真实 δ 落在 ±0.0042 秒区间内(半个名义秒 ÷ 120)。 多样本区间相交才能收敛,取中位数会把每条样本的噪声直接写进表。

位 中位数版 区间求交版
月 99.36% 99.39%
分 85.22% 87.56%
秒 60.81% 67.82%
六位全对 59.05% 65.05%

覆盖 1572/1572 个节气(1900–2030 全量)。

补采踩过的坑:立春只被「逆行」样本引用(阴年男/阳年女看上一个节), 常规顺行采样永远采不到它。定向补 462 条后才填满。

3.5 秒位为什么停在 67.8%

误差已收敛到 ±3 名义秒,且错误全是「我算大了 1~3」,小数越大错越多 (0.818 → −3,0.962 → −2,0.088 → −1)。这是 δ 精度不足的特征: 判定边界在 0.5 名义秒,需要 δ 精确到 4 毫秒,而当前残差中位 2.63 毫秒。

取整方式全部试过,round 最优:

取整 秒位 六位全对
round 46.7% 43.83%
floor 29.4% 28.34%
ceil 25.1% 23.16%
floor(x+0.25) 39.4% 37.75%

传统口诀的链式折合(3 天=1 年、1 天=4 月)年位 0.0%,完全不对—— 问真不用传统折合,是一次性乘 120 再拆位。

继续提升只能加密采样:每节气需 100+ 条才能把 δ 收敛到 4 毫秒内, 1572 个节气约 15 万次请求。

童子煞:已破解(传统口诀)

前 8 轮全部失败,因为一直在找「柱位 × 参照₁ × 参照₂」的静态组合表。 真正的规则是命理传统口诀,两个维度并列(季节 + 年纳音),不是嵌套:

春秋寅子贵      月支属 春(寅卯辰)/秋(申酉戌) → 日支或时支为 寅、子
冬夏卯未辰      月支属 冬(亥子丑)/夏(巳午未) → 日支或时支为 卯、未、辰
金木马卯合      年纳音属 金/木             → 日支或时支为 午、卯
水火鸡犬多      年纳音属 水/火             → 日支或时支为 酉、戌
土命逢辰巳      年纳音属 土                → 日支或时支为 辰、巳

五个条件取并集,日柱、时柱各自独立判定。

验证(4771 条样本):

目标柱 精确率 召回 TP FP FN TN
时柱 100% 100% 1787 0 0 2984
日柱 100% 100% 1674 0 0 3097

接入后全量审计:整柱完全一致 68.93% → 85.72%, 神煞完全对齐 52/59 → 53/59,童子煞 5498 例全部命中、零假阳性。

决定性线索:按目标柱地支统计标注率,丑、申、亥 恰为 0.0%, 而口诀涉及的地支正是「寅子卯未辰午酉戌巳」9 个 —— 完全吻合。 这个 0% 是排除法的入口:先确定哪些支永不标注,再找剩下的触发条件。

教训:之前 8 轮失败的共同原因是假设「二维静态组合表」。 实际规则是「两个独立维度(季节、纳音)各自给出候选支集合,再取并集」。 二维穷举永远找不到并集结构。

童子煞:第 7、8 轮穷举仍失败

已确认的结构性事实(4771 样本):

于是穷举单参照/双参照的「纯度」(某格标注率 ≥95% 或 ≤5% 算纯):

参照 目标柱 纯样本占比 纯格子
月支 日柱 58.3% 84/144
年支 日柱 25.0% 36/144
月支 时柱 36.4% 85/144
年纳音五 + 日支 日柱 63.9% 38/60
季节 + 日支 日柱 58.3% 28/48
月支 + 日干 日柱 0.0% 0/120
月支 + 年干 日柱 0.0% 0/120
月支 + 时干 时柱 0.9% 2/120

最高的「年纳音五 + 日支」只有 63.9%,离可用(95%+)差很远。 加入天干反而降到 0%——说明天干不是有效维度。

结论:童子煞不是「单一参照 + 地支」的二维规则, 至少还有一个未识别的维度(可能与节气/月令深浅、或干支组合有关)。 4771 条样本在二维穷举下已到极限,需要新思路或针对性样本。

天罗地网:4 条路径均失败

API 的 szshensha 里同时存在三种写法:「天罗地网」(合并名,月柱为主)、 「天罗」(日支戌亥 + 年纳音火)、「地网」(日支辰巳 + 年纳音土水)。 后两条已 100% 零假阳性;合并名 1094 例全部漏标。

试过:

假设 整柱一致 精确率 召回
全空(基线) 89.9% — —
月支套天罗/地网判定 — 19.6% 19.8%
月日支构成辰巳/戌亥对 92.4% 100% 24.5%
成对 + 年纳音,标所有参与柱 90.4% 56.4% 30.7%
成对 + 日支在集合 + 年纳音 90.7% 66.2% 22.3%

关键判断:全空基线就有 89.9%,最好的假设只多 0.5 个点, 且精确率 56%——一半标错。这是退化解,不是真突破。

统计显示每组「辰巳在哪些柱」里,约一半标一半不标, 说明还有未找到的第二个判别条件(可能涉及月令、旬空或纳音五行组合)。 仅有 4771 条样本不足以区分。

校验脚本的一个坑:Python engine.py 的 shensha 是 5 元素 (前四柱 + 问真 szshensha 的空占位维),而 JS bzAllShensha() 返回 4 元素。 差分脚本直接整体比对会永远 0%,误报成「JS 与 Python 神煞不一致」。 必须只取前 4 柱 [:4] 再比。修好后 JS↔Python 神煞是 100%。

天罗地网(合并名):第 5 轮用信息增益,仍失败

前 4 轮(月支套判定、月日支成对、成对+纳音、成对+日支+纳音)全败。 这轮换童子煞的成功方法:算信息增益找最强维度。

柱 最强特征 增益 对应童子煞
月柱 四支类 0.1989 0.2013
时柱 四支类 0.1463 —
日柱 四支类 0.1289 —

增益看似接近童子煞,但枚举 81 种「四支类」模式后:

对比童子煞的成功特征:它有明确的 0% 排除集合(丑申亥) 和 97% 的命中格,是「二元清晰」结构。 天罗地网则是「连续灰色分布」,判别条件不在这层。

结论:天罗地网至少需要三维条件,4771 条样本不足以分离。 与童子煞的差别说明:不是所有神煞都能用「找 0% 排除集合 + 触发条件」 这套方法解出来,它要求规则本身是稀疏二元结构。

天罗地网:第 7、8 轮仍失败,确认需要更多样本

第 7 轮验证「成对 + 位置」:

成对位置 样本 标注率
年+月 (0,1) 95 55%
年+日 (0,2) 110 52%
月+日 (1,2) 104 54%
日+时 (2,3) 67 52%
年+时 (0,3) 58 47%
月+时 (1,3) 54 4%
单支(不成对) 505 2%

第 8 轮逐个排除第二条件,全部无区分度:

维度 区间
年纳音(金木水火土) 44% / 46% / 47% / 48% / 52%
日干(十干) 39% ~ 57%
含日柱 vs 不含 54% vs 39%

结论:成对是必要条件(不成对只有 2%),但 1012 个成对样本里 481 标 / 531 不标,接近 50:50,第二条件的候选维度全部无信号。

这意味着第二个条件可能是:

当前样本量(4771)无法解出,需针对性补采。 按童子煞的经验,至少要 5 个数量级的样本量(数万条)才能做多维交叉。

三奇贵人:破解(100%/100%)

规则只有一条,且要求顺序 + 连续:

四柱天干中,存在某个连续三柱,其天干依次为 「甲戊庚」「乙丙丁」「壬癸辛」之一。满足则标日柱。

关键是「顺序」这一维度。三次尝试的对比(4771 样本):

判据 精确率 召回 假阳
四干含三奇字(任意位置) 7.4% 100% 275
连续三柱含三奇字(任意顺序) 13.8% 100% 137
连续三柱 + 固定顺序 100% 100% 0

整局一致 4771/4771 = 100.00%。

假阳样本全在顺序上翻车:癸乙丁丙(应乙→丙→丁)、戊戊甲庚(应甲→戊→庚)。

教训:排序维度最容易被忽略。 前两次尝试都只检查「集合包含」, 集合是无序的,所以 137 个错误顺序被判为命中。加上顺序约束后一步到位。

学堂 / 正学堂 / 词馆 / 正词馆:全部破解(100%/100%)

这四种是一套规则,不是四套。关键发现:

  1. 年柱恒不标(0 例,4771 样本)——与童子煞同样的排除结构
  2. 地支只有 4 个:寅巳申亥,其余 8 个从不出现
  3. 年纳音 → 唯一地支:
    • 学堂:金→巳 木→亥 水→申 火→寅 土→申
    • 词馆:金→申 木→寅 水→亥 火→巳 土→亥
  4. 地支匹配则必标其一,绝不空: (学堂/正学堂) 只有 (T,F) 或 (F,T),从不同时
  5. 「正」还是「非正」由 (该柱干支, 年纳音) 唯一决定——25×2 个组合全部 0%/100%,零混合

「正」的干支(各 5 个):

纳音 正学堂 正词馆
金 辛巳 壬申
木 己亥 庚寅
水 甲申 癸亥
火 丙寅 乙巳
土 戊申 丁亥

验证(4771 样本 × 4 柱 = 19084 个柱位): 整柱完全一致 100.00%,四种各自 P/R 均 100%,零假阳性。

接入后全量审计:整柱一致 85.72% → 96.33%, 神煞完全对齐 53/59 → 57/59(97%)。

为什么之前失败:早期只试了「年纳音→地支对」并直接套用,忽略了 「正/非正」是第二个独立维度。25 个组合里 20 个是普通学堂, 只有 5 个是正学堂——不加这个维度会有大量漏标和错标。

天罗地网:第 6 轮「月柱优先」,纸面 95.47% 但实装暴跌

从假阳/漏标样例里发现「月柱参与成对时只标月柱」,推出新规则:

方案 整柱一致 精确率 召回
全空基线 89.92% — —
之前最好(成对+纳音) 90.4% 56.4% 30.7%
月柱优先 95.47% 75.5% 90.8%

纸面上比基线高 5.5 个点、召回 90.8%,看起来是突破。实装后全量审计:

项 实装前 实装后
整柱完全一致 85.72% 83.63%
天罗地网 漏 1094 110
天罗地网 假阳 0 1636

召回改善很大(漏 1094→110),但假阳 1636 例,净效果是整柱一致掉 2 个点。已回滚。

关键教训:单看「漏/召回」会严重误判。 我的验证脚本只算命中率, 没算它对整柱比对(全对才算对)的破坏——1636 个假阳散布在大量样本里, 每个都把整柱判错。以后任何神煞规则合入前,必须跑全量 reaudit_shensha.py, 不能只看局部 P/R。

δ 表:加密采样反而变差(重要反例)

按 dense_plan 找出「影响样本多、现样本少」的 161 个节气(都在 1900-2030), 补采到每节气 20 条(2638 次请求),样本从 14161 → 16799 条重建 δ 表。

结果 大幅变差:

项 补采前 补采后
年 99.96% 99.95%
月 99.39% 99.35%
日 98.98% 98.93%
时 97.87% 97.87%
分 90.61% 86.22%
秒 69.34% 49.33%
六位全对 65.32% 44.49%

原因是重建时斜率 K 从 −2.8577 漂到 −3.2266,把原本配平的残差结构打乱了。

结论:δ 表不是「越准越好」的物理量,而是一个拟合参数。 当前 65.32% 恰好是这套参数与测试集之间的最优平衡点, 加样本会破坏平衡,不是提升。已回滚。

这也解释了为什么删掉 2048 年那些 −50 的「物理上荒谬」的 δ 反而变差: 它们同样是拟合平衡的一部分,不是错误。

过拟合的一个实例:曾按性别加残差(男 +0.5 / 女 +2 名义秒)—— 在 2428 条子集上六位全对 43.04% → 50.21%,看着像突破。 但拿到全量 9279 条上是 65.05% → 50.50%,反而大跌。 原因是调参把原本正确的样本改错了,换来的只是另一批。 子集上的提升必须先过全量验证。

真正的短板:出生年份 > 2030

按出生年份分档(2600 条样本):

出生年份 样本 六位全对
≤ 1990 1038 52.5%
1991–2030 925 54.9%
> 2030 512 0.0%

δ 表只覆盖 1900–2030,超出后走「节气名中位数」兜底, 而中位数误差 5 秒以上,经名义秒 ×120 放大后必然全错。 这 512 条占了测试样本的 20%,是拉低整体正确率的主因。

补 2031–2060 的 δ 后,这部分理论上能追上 50% 左右的水平。

按年份统计排除了「某几年特别差」的可能(2428 条样本):

年份范围 六位全对 前 4 位
早期怀疑的 10 个年份 53.6% 大多 100%
全部年份合计 42.5% 大多 100%

那批年份反而高于平均,说明短板不在特定年份。同时几乎所有年份的 「前 4 位」都是 100%、99.2% 这个量级——年月日时已基本正确,误差全部集中在分秒, 与 δ 精度不足的判断一致。

3.6 交运

交运日期 = 出生 + 起运年/月/日
首干 = 交运日期的年柱天干(以立春为界)
次干 = 首干合化干(甲己 乙庚 丙辛 丁壬 戊癸)
节气 = 交运日期之前最近的「节」
天数 = round((交运日期 - 该节) / 86400)
格式:逢X、Y年 <节气>后N天 交大运

四、其他字段

字段 规则
tdbz 请求参数 today 那天 00:00(子时)的四柱,与出生时间无关
xiaoyun xy[59] = 时柱,xy[59+k] = 时柱 + k·step(顺 +1 / 逆 −1),共 110 项
dyshensha 大运干支代入时柱位置后取该柱神煞;另需补天罗/地网(判的是大运地支本身);金神不由大运触发
szshensha 5 个元素:前四柱 + 一个恒为空数组的占位维
kongwang 各柱旬空,四柱各一

五、已 100% 对齐的字段(19 个)

bz  ss  cg  cgss  kw  xy  zz  ny
dayun  xiaoyun
taixi  taiyuan  minggong  shenggong
taixi_nayin  taiyuan_nayin  minggong_nayin  shenggong_nayin

未达 100% 的:

字段 一致率 原因
qiyunsui / qiyunarr / jiaoyun 61% / 63.7% / 77.2% 秒位采样精度
szshensha 25% 未破解的 7 种神煞
dyshensha 80.4%(逐步) 同上

六、修复过的 bug 清单

复刻过程中发现并修掉的真实缺陷:

# bug 影响
1 阴干十二长生起点漏 +7 乙禄算成申,应为卯
2 Z2 变量被当前柱支覆盖 将星、华盖全面错位
3 双参照数组被 push 压平 文昌/国印/金舆/天厨整体失效
4 6 个年支系神煞误查年柱 年柱多标
5 文昌/国印参照取地支而非天干 漏标 414/224 次
6 孤辰运算符优先级 2+3*b%4 应写成 2+3*(b%4)
7 元辰 sex 参数在调用链上丢失(JS + Python 各一处) 所有女性的元辰算错
8 拱禄实现是 pass 空操作 从来没标出来过
9 all_shensha 调旧版 shensha_formula 比新版少十几个神煞
10 起运名义秒缺四象限修正 六位全对只有 2.14%
11 tdbz 用 datetime.now() 而非 today 参数 日期整体差一天
12 szshensha 只返回 4 维 整字段比对永不可能相等
13 大运神煞只调查表型实现 漏德秀/空亡/元辰/月德/天德

另修过两个天文层 bug:

修正后节气精度从 ±37 秒提升到 ±5 秒。


七、架构

assets/js/bazi/
  vsop-data.js      VSOP87 黄经系数(129 项,从 Python 导出)
  astro.js          儒略日 / 太阳视黄经 / 章动 / 光行差 / 节气
  jieqi-delta.js    δ0 表(1572 个节气)+ 斜率 K
  ganzhi.js         四柱 / 起运 / 大运 / 小运 / tdbz / dyshensha
  shensha.js        神煞(34 种公式 + 18 种枚举)
  interpret.js      命盘解读
  interpret-data.js 解读用语料

Python 参考实现在 /opt/data/bazi/,结构与 JS 一一对应。 两边差分校验:四柱 / 神煞 / 交运串 100% 一致。


八、为什么不能真正做到一比一

  1. 核心算法在服务端,从未获取到源码或字节码。
  2. App 端有爱加密 VIP 加固:DEX 是约 20.47MB 加密载荷,熵 8.00, 分块无重复,静态不可还原。
  3. 现有实现全部来自黑盒拟合:用公开命理公式猜规则 → 拿 API 样本验证 → 修正。 这条路径能达到部分字段 100%,但无法证明内部实现相同。

App Store 描述提到「独家自研五柱算法」,这在公开命理体系和所有接口响应中 都没有对应字段,本实现完全没有涉足。


九、可复现性

所有数字都能用仓库里的脚本重算:

脚本 作用
measure_qiyun.py 起运六位与 API 对比
reaudit_shensha.py 神煞逐种对齐审计
audit_27fields.py 27 个 API 字段逐项对比
final_differential.py Python vs JS 差分
jieqi_delta_merge.py 从样本重建 δ 表

样本库在 /opt/data/bazi/data/,约 1.1 万条真实 API 响应。