ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

紫微斗数排盘避坑:十二宫、五行局与四化校验

紫微斗数排盘避坑:十二宫、五行局与四化校验

简介:这是一款面向命理爱好者与紫微斗数研究者的 PC Windows 排盘工具,免注册、解压即用,可替代手工起盘与查表,适合从入门排盘到命例专题研究的各个阶段。软件提供三合盘、飞星盘、四化盘三种风格,以及太阴天地人三盘、冬至盘、节气天地人三盘(立春盘)等排法,支持阳历、阴历、四柱三种输入并可选真太阳时;星曜定义、庙旺与四化均可自行设定,还具备命例分类查询与无限保存功能,适用于公元1000年之后的年代,并自动适配简体与正体中文系统。压缩包共160个文件、约1.42MB,以145个rtf资料文档为主,配合xml配置、两个exe启动程序、chm帮助手册与mdb命例库,文件精简且按功能分层组织。目前已有5791人学习下载。读者可借此直接上手排盘,并依托自定义星曜与四化规则开展命例比对与专题研究,省去重复录入与手工整理的麻烦。

1. 一张盘的对错,在点“排盘”之前就定了

先说个反直觉的结论:紫微斗数排盘的成败,八成不在软件界面好不好看,而在你敲进去的那几个字段对不对。我见过太多人拿着排出来的盘讨论半天,最后发现生时按“北京时间”录的,出生地却在西边一千多公里外,整张盘十二宫全歪。易排盘.紫微斗数 V3.0 这类工具的价值,恰恰是把“寅宫起正月、顺数生月、逆数生时”这套手工查表流程固化下来,让你不用背口诀也能出盘。但它固化的只是算法,不替你判断输入。这篇就按“结构 → 上手 → 导出 → 避坑 → 校准”的顺序拆一遍,适合刚开始用排盘软件、又不想把结果当黑匣子的人。

2. 安星骨架:十二宫、五行局与四化是怎么串起来的

排盘软件本质上是三张查找表加一套索引运算。第一张表把农历生辰映射到宫位,第二张表把宫位映射到星曜,第三张表把年干映射到四化。三层是严格依赖的:宫位错了,五行局跟着错;五行局错了,紫微星落宫错;紫微错,十四主星全错。所以下面按依赖顺序讲,不讲界面。

2.1 定命宫与身宫:从寅宫起正月的两步顺逆

紫微斗数的十二宫固定以寅宫为起点排正月。命宫的算法是两步:先从寅宫起正月,顺数到生月,得到一个月支宫位;再从这个宫位起子时,逆数到出生时辰,落点就是命宫。身宫则是同样的起点、同样的顺数到生月,但第二段改成顺数。

举个例子:三月出生、卯时。顺数正月在寅、二月在卯、三月在辰,月支宫落在辰;从辰起子时逆数——子时在辰、丑时在卯、寅时在寅、卯时在丑,命宫落丑。这段逻辑写成代码只有几行,但手工算的时候“逆数”这两个字最容易翻车,尤其是子时出生的人容易把起点和终点搞反。

# 十二宫地支索引:子=0, 丑=1, ... 亥=11(顺时针排布) ZHI = ['子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥'] def ming_shen_gong(month: int, hour_zhi: int): """month: 农历月份 1-12;hour_zhi: 时辰地支索引 0-11(子=0)""" # 第一步:寅宫起正月,顺数到生月(寅的索引是 2) base = (2 + (month - 1)) % 12 # 第二步:从月支宫起子时,逆数到生时 -> 命宫 ming = (base - hour_zhi) % 12 # 身宫:同一段起点,改为顺数 shen = (base + hour_zhi) % 12 return ZHI[ming], ZHI[shen] print(ming_shen_gong(3, 3)) # 三月卯时 -> 命宫丑、身宫未

这段的参数只有两个:农历月(注意是农历,不是公历月份)和时辰地支索引。之所以用% 12而不用条件判断,是因为顺逆数本质是模 12 的加减,写成分支语句在边界(亥→子)上极易出错,这也是我早期写脚本时踩过的坑。函数返回的地支只是“宫位”,不含天干,宫干要靠下一步的五虎遁补上。

宫干用五虎遁从年干推:甲己之年丙作首,乙庚之岁戊为头,丙辛必定寻庚起,丁壬壬位顺行流,戊癸之年甲寅求。意思是年干为甲或己时,寅宫天干为丙,之后顺排。命宫的天干确定后,整个盘十二宫的天干就全部确定了,因为宫干是连续顺排的。

注意:农历月和闰月是两回事,闰月生人该按本月还是下月算,各家说法不一,后面第 5 章单独讲。

2.2 五行局是整张盘的地基:纳音表只能硬查

命宫干支确定后,用纳音五行定五行局。这一步没有捷径,纳音表是固定的六十甲子对应关系,局数只有五个值:水二局、木三局、金四局、土五局、火六局。注意局数和五行不是按“数量大小”对应,水是 2、木是 3、金是 4、土是 5、火是 6,这组数字后面会被大限起运直接复用。

命宫纳音五行局名局数起运虚岁每宫年限
水水二局2210
木木三局3310
金金四局4410
土土五局5510
火火六局6610

这张表看着简单,实操中的问题是“纳音五行”和“正五行”容易混。命宫干支如果是甲子,正五行是木,纳音是金,局取金四局而不是木三局。很多手工排盘出错就错在这一步,软件里则是内置的,你只需要知道它影响什么——它决定紫微星从哪个位置起算,也决定大限从几岁开始走。

写代码时我一般把六十甲子纳音做成字典查,而不是用公式推:

# 六十甲子纳音五行(节选前 12 组,实际使用需补全 60 组) NAYIN = { '甲子':'金','乙丑':'金','丙寅':'火','丁卯':'火','戊辰':'木','己巳':'木', '庚午':'土','辛未':'土','壬申':'金','癸酉':'金','甲戌':'火','乙亥':'火', } JU = {'水':2,'木':3,'金':4,'土':5,'火':6} def wuxing_ju(ming_ganzhi: str) -> int: """传入命宫干支字符串,返回局数 2-6;查不到直接抛错,别静默兜底""" wy = NAYIN.get(ming_ganzhi) if wy is None: raise KeyError(f'{ming_ganzhi} 不在纳音表中,先补表') return JU[wy]

我特意让函数在查不到时抛错而不是返回默认值。排盘脚本最怕的就是“看起来跑通了”——一个静默的默认值能让整张盘错到你自己都发现不了。参数说明:输入必须是干支拼接的两字字符串,格式不统一(比如带空格、带“年”字)会直接命中 KeyError,这反而是好事,逼你先把数据洗干净。

2.3 紫微星落宫:局数和农历日两个输入,余数处理是分水岭

紫微星的定位靠局数和农历生日两个数推,通行的做法是找一个最小的整数 n,使“局数 × n ≥ 生日”,记余数 r = 局数 × n − 生日,再从寅宫起顺数 n 宫,最后按 r 做对半进退。这里必须说清楚:余数的进退规则各家实现有差异,尤其是余数为奇数时是进是退、退几宫,不同流派的算法不完全一致。

正因如此,我不建议你拿网上的公式直接改软件结果,正确的用法是把它当校验:先用软件出盘,记下紫微星落宫,再用“局数×n≥日”这套取整逻辑反推,看反推出的基准宫与软件结果是否落在同一个区间。对不上,说明你用的规则和软件内置的不是一套,这时候该调的是软件的流派选项,而不是怀疑自己。

def ziwei_base(ju: int, day: int): """返回 (n, r):n 为商数,r 为余数,落宫在此基础上做进退""" n = -(-day // ju) # 向上取整,避开浮点 r = ju * n - day return n, r print(ziwei_base(4, 17)) # 金四局、农历十七 -> n=5, r=3

-(-day // ju)是整数向上取整的惯用写法,比math.ceil(day/ju)安全,不会在超大数上出精度问题。返回值里 n 决定从寅宫起顺数几宫,r 决定后续进退几宫——具体进退方向,以你所用流派和软件设置为准。这段代码在整套流程里的作用不是“算出紫微”,而是“算出中间量”,方便你和软件结果逐项对照。

2.4 星曜、四化与宫干:三层数据结构别混在一起

一张完整盘面上其实有三类信息,很多新手把它们混成一锅:

第一层是宫位,十二个,每个宫有地支、宫干、宫名(命宫、兄弟、夫妻……)。宫名是从命宫起逆排的,顺序固定。

第二层是星曜,分甲级主星十四颗、辅星若干、杂曜若干。主星有固定排布规则,辅星里左辅右弼按生月排、文昌文曲按生时排、天魁天钺按年干排、禄存按年干排、擎羊陀罗夹禄存、火星铃星按年支和生时排、地空地劫按生时排。每一组的输入变量都不一样,这是排盘最容易出 bug 的地方——不是算法难,是输入源多。

第三层是四化,只由生年天干决定,输出四个结果:化禄、化权、化科、化忌。四化依附在具体星曜上,不占宫位。

年干化禄化权化科化忌
甲廉贞破军武曲太阳
乙天机天梁紫微太阴
丙天同天机文昌廉贞
丁太阴天同天机巨门
戊贪狼太阴右弼天机
己武曲贪狼天梁文曲
辛巨门太阳文曲文昌
壬天梁紫微左辅武曲
癸破军巨门太阴贪狼

庚干这一行我故意空着,因为它就是那个“分水岭”:常见的有太阳化禄、武曲化权、太阴化科、天同化忌一套,也有把天同放到化禄位、太阳改到别处的说法。你在软件里如果看到庚年生人的四化和手头资料对不上,八成不是软件算错,是流派选项不同。这部分建议在设置里确认清楚,再开始批量排盘,否则后面所有分析都建立在错的地基上。

3. 用 V3.0 排第一张盘:输入规范、开关设置与五步核对

原理清楚之后,上手反而快。但我建议第一次用不要随便找人生辰试,先找一张已知答案的盘——比如公开出版物里附的示例盘,或者你自己手工完整算过一遍的盘。目标只有一个:验证这套输入习惯在你手上能不能稳定复现同一张盘。

3.1 生辰录入:四个字段里有两个最容易错

排盘需要的最小输入集是:出生年、月、日、时辰,加上性别(决定大限顺逆)和出生地(决定时差校正)。听上去不多,但年份的公历农历、日期的闰月、时辰的早晚子时,每个都能独立出错。

我的录入习惯是:先确认软件当前处于公历模式还是农历模式,再敲数字。这一步看着多余,实际上农历和公历在月份上能差一个月,输错了盘面会整体偏移,但界面不会给你任何提示。录完之后立刻回读一遍——软件通常会把你输入的内容转成农历显示,这时候对照一下你手里的农历日期,对不上就是模式选错了。

出生地这个字段的作用是经度校正,也就是真太阳时。如果你只知道城市不知道经度,问题不大,软件一般内置了城市经度表;但如果出生地在时区边界附近,或者出生时间就在时辰交界的前后十分钟,这个字段就成了决定性的。

提示:出生时间尽量精确到分钟,别只记“大概下午三点”。申时和酉时的分界就在 15:00 和 17:00,差十分钟就是两个时辰、两张盘。

3.2 排盘前要确认的四个开关

不同版本菜单叫法不一样,但这类软件通常有这么几组设置,排盘前值得逐一看一遍:

开关常见选项影响
子时处理晚子时归当日 / 归次日23:00–24:00 出生者的日柱与命宫
闰月处理按本月 / 按下月 / 按半月拆分闰月出生者的月支宫位
时差校正关闭 / 仅经度 / 经度+均时差时辰归属,进而影响命身宫与文昌文曲等按生时排的星
四化流派各流派四化表化禄化权化科化忌四颗星落点

这四项的共同点是:它们都不改变你输入的生辰,只改变解释方式。所以一旦选定,就要在后续所有盘上保持一致,否则你做多盘对比时会把流派差异当成命理差异。

3.3 拿已知盘做回归:五步核对法

第一次用新软件,我会走一遍固定流程,五步,缺一步都可能在后面埋雷:

第一步,核十二宫地支顺序。从命宫起逆排,兄弟、夫妻、子女……顺序必须是固定的,看一眼有没有错位。

第二步,核命宫与身宫的地支。用第 2 章那个ming_shen_gong函数算一遍,和盘面比。这一步能同时验证“月份输入是否正确”和“子时处理是否正确”两件事。

第三步,核五行局。看软件显示的局名是不是水二、木三、金四、土五、火六之一,再用命宫干支查纳音确认。

第四步,核十四主星数量。一张盘上甲级主星必须正好十四颗,不多不少。有些软件会把借星安宫的对宫星也标出来,看起来像多了,实际是显示层的差异,要在设置里看清楚。

第五步,核四化。生年四化必须正好四颗,且分属禄权科忌各一。如果出现两颗化忌或者某颗星同时化禄又化权,直接判定为配置问题。

# 盘面结构自检:把从软件抄下来的宫位数据丢进来跑一遍 GONG_ORDER = ['命宫','兄弟','夫妻','子女','财帛','疾厄', '迁移','交友','官禄','田宅','福德','父母'] def check_pan(gongs: dict): errs = [] if len(gongs) != 12: errs.append(f'宫位数 {len(gongs)},应为 12') if set(gongs.keys()) != set(GONG_ORDER): errs.append('宫名不匹配,检查是否有重名或漏宫') stars = [s for g in gongs.values() for s in g.get('main', [])] if len(stars) != 14: errs.append(f'主星 {len(stars)} 颗,应为 14;可能漏抄或重复') sihua = [h for g in gongs.values() for h in g.get('sihua', [])] if sorted(sihua) != ['化忌','化权','化科','化禄']: errs.append(f'四化异常:{sihua}') return errs or ['结构自检通过']

这段代码的参数是一个以宫名为键的字典,每个宫位下挂main(主星列表)和sihua(四化列表)。它不校验命理对错,只校验结构完整性——但恰恰是结构错误占了实操问题的一大半:漏抄一颗主星、把对宫借星算进本宫、四化抄串行,这些问题肉眼扫一遍很容易漏,脚本一秒就报出来。

4. 盘面导出与二次加工:把十二宫变成可检索的表

排完一张盘只是开始。真正需要软件的地方,是你手上有几十上百个盘要横向比较的时候——比如做同一年出生群体的共性观察,或者给一份资料做批量整理。这时候靠肉眼一张张翻就是灾难。

4.1 导出格式决定后续工作量

这类软件的导出通常有几种形态:图片、文本、结构化数据(CSV/JSON/表格)。图片适合存档和分享,但不可检索;纯文本适合阅读,解析起来要写正则;结构化数据最适合二次加工。

我的建议是:能导出结构化数据就不要导出图片。哪怕软件的导出字段不全,你也可以导出文本后自己补。如果只能出图,那就退一步,手工把十二宫的宫名、地支、主星、四化四项录成表——听起来笨,但录一遍的过程本身就是熟悉盘面结构的过程,比看十张图有用。

导出后第一个动作是检查编码和分隔符。中文 CSV 在部分环境打开会乱码,这不是软件的问题,是编码没声明。

# 先看文件头几行和编码,别急着写解析脚本 file pan_export.csv head -n 3 pan_export.csv # 如果是 GBK 编码,转成 UTF-8 再处理 iconv -f GBK -t UTF-8 pan_export.csv -o pan_utf8.csv

file命令会告诉你编码和换行风格,head让你确认分隔符是逗号还是制表符。这两步花不了十秒,但能省掉后面半小时的“为什么解析出来全是问号”。iconv的-f是源编码、-t是目标编码,转完再用head复看一眼,确认中文正常。

4.2 把盘面整理成可筛选的长表

宽表(一行一张盘、十二宫横向铺开)好看不好算,长表(一行一个宫位、带盘 ID)才好筛。我一般把导出数据转成“盘 ID + 宫名 + 地支 + 宫干 + 主星 + 辅星 + 四化”这种长表结构,然后用条件筛。

import csv from collections import defaultdict def load_pan(path): """读取导出的 CSV,返回 {盘ID: {宫名: {...}}}""" pans = defaultdict(dict) with open(path, encoding='utf-8') as f: for row in csv.DictReader(f): pid = row['盘ID'].strip() gong = row['宫名'].strip() pans[pid][gong] = { 'zhi': row['地支'].strip(), 'gan': row['宫干'].strip(), 'main': [s for s in row['主星'].split('/') if s], 'sihua': [s for s in row['四化'].split('/') if s], } return pans def find_pan(pans, star, gong_name): """筛出某颗主星落在指定宫的盘""" return [pid for pid, g in pans.items() if star in g.get(gong_name, {}).get('main', [])]

load_pan的关键假设是导出文件有稳定表头,字段名固定。如果软件导出的是自由文本,就把csv.DictReader换成按行切分的解析逻辑,但字段名要自己定死,不要用位置索引——位置索引在字段增删时会静默错位,那种错误最难查。find_pan是典型的检索函数,参数是星名和目标宫名,返回盘 ID 列表,用来回答“哪些盘紫微落在夫妻宫”这类问题。

4.3 多盘并列时的差异标记

做横向比较时,最有用的一步是把“相同”和“不同”分开。十二宫里,命宫、身宫、五行局这三项的变化最能说明输入差异,所以我一般先做一张差异表:

盘 ID命宫地支身宫地支五行局与基准盘差异项
P01(基准)丑未金四局—
P02丑未金四局无(输入完全一致)
P03子午水二局命身宫、局数均变,疑似时辰差一位
P04丑未木三局局数变但命宫未变,疑似年份或纳音口径不同

这张表的作用是定位问题。P04 那种情况最典型:命宫没变说明月份和时辰没问题,局数变了说明年干或纳音口径有问题——这类“部分相同部分不同”的模式,比“全都不一样”更容易反推出错在哪一环。

注意:差异表只做定位,不做结论。两个盘宫位不同,不代表其中一个错了,也可能只是出生信息本来就不同。

5. 避坑:排盘最容易翻车的五个地方

下面五条都是实际会遇到的,按“现象 → 原因 → 解决”写,每条都对应一个具体的设置项或输入项。看完再去排盘,能少走不少弯路。

5.1 晚子时出生:同一分钟,两张盘

现象:23:10 出生的人,用不同软件排出来的命宫差一个宫位,日柱也不一样,导致整张盘对不上。

原因:晚子时(23:00–24:00)在传统上有两种处理:一种认为已经进入次日子时,日柱进位、时柱用次日子时;另一种认为仍在当日,只是时辰属子。这不是算错,是口径不同。

解决:在软件设置里找到子时处理选项,明确选一套,并把它写进你的记录里。同一批数据必须用同一套口径,否则后面的对比全部失效。核对方法很简单:把出生时间改成次日 00:10 再排一次,如果两张盘完全一致,说明软件用的是“归次日”口径。

5.2 闰月出生:月份到底算哪个

现象:闰四月出生的人,月支宫位和手算结果对不上,进而命宫、身宫、五行局全偏。

原因:闰月的归属有三种常见处理——按本月算、按下月算、按日期过半拆分。软件默认选项未必和你手头的资料一致。

解决:先在设置里确认闰月处理方式,再用一个闰月出生的已知盘验证。验证时只看一个指标就够:月支宫位。因为闰月的影响是从“顺数到生月”这一步开始的,月支宫位对了,后面才有讨论的基础。如果你手里没有已知盘,就把三种口径各排一次,看结果差异落在哪个宫,至少心里有数。

5.3 真太阳时:时区校正不是可选项

现象:出生地在西部的人,用北京时间直接排,时辰落到了下一个时辰,命宫偏移。

原因:北京时间是东八区标准时,但出生地经度不同,真太阳时和平太阳时都会有偏差。经度每差 1 度约差 4 分钟,累计到时辰边界上就是致命的。此外还有均时差(地球公转轨道偏心率造成),一年中最大能到十几分钟。

解决:把出生地填进去,开启经度校正;对时间敏感的场景再开启均时差校正。判断是否需要校正的经验值是:出生时间距离时辰边界不足 30 分钟时,必须校;距离边界超过 1 小时,通常不影响时辰归属,但仍会影响部分按具体时刻排的细节。

提示:不确定出生地经度时,宁可填一个同省城市,也不要留空。留空等于放弃校正,误差可能比填个近似城市更大。

5.4 四化表版本:庚干是绕不过去的坎

现象:同一张盘,你的软件显示天同化忌,参考资料写的是太阳化禄、天同化忌,两个都对不上;或者干脆化禄星都不一样。

原因:四化表有流派差异,其中庚干分歧最集中。有的版本太阳化禄、武曲化权、太阴化科、天同化忌,有的版本把天同放到化禄、太阳换位。其余年干的分歧小得多,但也不是完全一致。

解决:选定一个流派并全程一致。具体做法是:在软件里找到四化设置项,改成和你参考资料同一套;如果软件没有选项,就在你的记录表里加一列“四化流派”,标明每张盘用的是哪套。批量分析时这一列必须参与分组,否则你会把流派差异误读成盘面差异。

5.5 大限起运:局数等于起运岁,但顺逆看阴阳

现象:大限的起始年龄和手算不一致,或者宫位走向完全相反。

原因:起运虚岁由五行局决定(水二局 2 岁起、木三局 3 岁起,依此类推,每宫 10 年),这一步一般不会错。错的多在顺逆:阳男阴女顺行,阴男阳女逆行,这里的“阳阴”指生年天干的阴阳,不是生肖。

解决:先核对起运岁数是否等于局数,再核对第一步大限落在哪个宫。如果岁数对、方向反了,就是性别或年干阴阳的输入问题。这类错误在软件里通常表现为“大限宫位整体镜像”,一眼能看出来,但前提是你知道正常应该往哪边走。

6. 进阶:自己维护一份安星对照表,把软件当校验器用

写到这里,前面讲的都是“怎么用软件出盘”。再往上走一层,我建议你换个思路:别把软件当唯一答案来源,把它当校验器。具体做法是给自己建一份最小对照表,每次软件升级、换版本、调设置之后,用这份表跑一遍,确认输出没漂移。

对照表不需要大,八到十二张盘就够,关键是要覆盖边界:

覆盖项选取原则张数
子时边界含 22:50、23:10、00:10 三个点3
闰月闰月内出生,含月初与月末2
时辰边界各时辰交界前后 10 分钟2
时区校正东西部各一张,出生时间接近时辰边界2
四化边界庚年生人,验证流派设置1
局数全覆盖五种局各至少一张5

这张表建一次能用很久。真正让它发挥作用的是验证脚本——把每张盘的“命宫地支、身宫地支、五行局、紫微落宫、四化四颗”五个关键值写进一个 JSON 基线文件,跑盘后自动比对。

import json def regression(baseline_path, current_pans): """baseline: {盘ID: {命宫, 身宫, 局, 紫微宫, 四化}}""" with open(baseline_path, encoding='utf-8') as f: base = json.load(f) diffs = [] for pid, expect in base.items(): got = current_pans.get(pid) if got is None: diffs.append((pid, '盘缺失', None)) continue for key, val in expect.items(): if got.get(key) != val: diffs.append((pid, key, f'{val} -> {got.get(key)}')) return diffs # 空列表表示全部通过

参数说明:baseline_path是基线 JSON 的路径,current_pans是本次跑出来的盘面字典,结构要与基线一致。函数返回差异列表,空列表才算通过。之所以只比五个关键值,是比较过的血泪经验——字段比得越多,噪声越大,很多字段的变化只是显示层调整,不是算法变动;而命宫、身宫、局数、紫微落宫、四化这五项一动,基本可以确定核心逻辑变了。

升级之后如果差异出现在“四化”这一项,先去看流派设置是不是被重置了,这是最常见的原因;如果差异出现在“紫微落宫”,大概率是余数进退规则改了,这种时候别急着手工修正,先用第 2 章那段ziwei_base反推一遍,看是规则整体变了还是个别日期有问题。

还有个小技巧:把对照表里的盘按“覆盖项”打标签,而不是按人名或编号打标签。这样当你想验证某个具体场景时,直接按标签筛,不用回忆哪张盘是干什么用的。我早期是用日期编号的,结果半年后自己都看不懂了,只能重新排一遍,纯属浪费。

从那以后我每次换版本、改设置、甚至是换一台机器重装,都会强制把这份对照表跑一遍,不通过就不往下做任何分析。这套习惯救过我几次——有一次升级后默认的四化流派被重置了,界面完全没提示,是靠对照表里那张庚年盘报出来的差异才发现的。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进