ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

奇门遁甲与大六壬排盘的程序化实现:干支历法、定局与三传的工程实践

奇门遁甲与大六壬排盘的程序化实现:干支历法、定局与三传的工程实践 简介本资源是一个基于纯JavaScript实现的在线玄学排盘工具面向易学爱好者、传统文化研究者及初学者解决奇门遁甲与大六壬人工排盘计算繁复、易出错、学习门槛高等实际问题。项目无需后端依赖开箱即用支持浏览器内实时输入时间参数并自动生成九宫盘面、八门九星布局及大六壬天地人三盘结构兼顾理论严谨性与交互便捷性。压缩包为404KB的ZIP文件主体为HTML、CSS与JS源码文件其中JS逻辑完整封装了干支推演、节气判定、神煞起例等核心算法HTML提供可视化盘面渲染CSS保障多端适配与古风界面呈现。目前已有1086人学习下载用户可直接部署运行、调试算法逻辑、理解排盘底层规则亦可作为传统文化数字化教学的可修改范例是连接古典术数原理与现代前端工程实践的轻量级技术载体。 奇门遁甲排盘和大六壬排盘属于传统三式里最考验“手上功夫”的两块。最近我把一个名为 qimen_star-master 的开源项目从头过了一遍它同时实现了奇门遁甲排盘和大六壬排盘代码量不算大但真正花时间的地方反而全在程序之外——干支历的边界、节气的判定、定局流派的取舍任何一个环节不对出来的盘就是废纸。这篇文章想把这些底层逻辑、实现思路、以及我实际踩过的坑完整梳理一遍给想自己写排盘工具或者想理解排盘原理的朋友做个参考。这个项目适合谁两类人最合适一类是懂一点技术、想进入术数领域的新手另一类是已经会手排奇门或六壬、但想把手排过程变成可复用程序的爱好者。我的建议是不要一上来就盯着九宫格和盘面展示先把“日期怎么变成干支”“节气怎么切分”“旬空怎么来”这些地基打牢后面的路会顺很多。1. 排盘程序到底在解决什么问题1.1 手排为什么容易“差之毫厘谬以千里”不管是奇门遁甲还是大六壬手排都需要经过大量口诀和推演步骤。奇门要定局、布三奇六仪、找值符值使、排九星八门八神每一步都和日干支、时干支挂钩大六壬则要定月将、加占时、起四课、推三传九宗门里还会因为一个“贼克”“涉害”的条件分支走向完全不同的传课。人脑做这些事最大的问题不是规则记不住而是“状态一多就容易漏”。比如某一步把阳遁顺飞误写成逆飞或者日柱算错一位导致旬空全盘错位这种错误在纸上很难发现因为整张盘看起来依然很“完整”而程序化排盘的核心价值就在这儿把规则变成确定性的、可重复执行的流程输入一个时间输出一个可验证的盘面。1.2 为什么选择“奇门大六壬”双引擎这两个术数虽然同属三式但底层逻辑完全不同。奇门遁甲的核心是“宫位星门神仪”的空间模型靠节气定局、九宫飞布大六壬的核心是“天地盘四课三传”的时间推演靠月将加时、九宗门取传。两者算法几乎不共享正好可以互相做交叉验证。我在项目里把两者放在一起还有一个实际原因同一张盘如果奇门断事和大六壬断事指向完全相反那一定是排盘环节有 bug如果指向一致至少说明历法基础、干支校正是可靠的。这种“互相印证”的思路比单独做一个排盘器更能暴露问题。1.3 程序产品的“盘子”怎么搭从产品角度看排盘工具可以拆成四层历法层把公历时间转成干支年、月、日、时处理节气、真太阳时、早晚子时。规则层奇门定局、六壬月将、四课三传等术数规则的实现。渲染层把计算出的盘面数据按九宫格、四课三传等结构展示出来。校验层提供与外部权威排盘结果的对比、导出 JSON 盘面数据等。qimen_star-master 这类项目最值得参考的往往不是某个炫酷的界面而是规则层的代码组织方式。规则层解耦得越干净后续扩展盘种、支持更多流派时就越省力。2. 先把底层的干支历法做对2.1 日干支计算的基准与公式排盘的第一步永远是“今天是什么干支日”。这个看起来简单但程序里必须有一个确定的基准日。常见的做法是选定一个已知干支的历史日期计算目标日期与该基准日的儒略日差值然后对 60 取模辅以天干地支的循环映射。我个人的建议是不要自己手写这套天文公式而是引入成熟的历法库比如 lunar、sxtwl 这类开源库它们同时处理了农历、公历、干支、节气等基础数据比自己用浮点天文算法靠谱得多。程序里只需要把历法库返回的干支信息再封装一层业务接口后续排盘逻辑全部依赖这层接口避免在业务代码里到处写“取日柱”这种底层调用。2.2 早晚子时是第一个大坑干支历的日柱切换点和公历零点并不一致。按传统规则日柱是从前一天的 23 点开始换日也就是“晚子时算第二天”。这意味着 2025 年某天的 23:30公历日期还是当天但干支日柱已经进入下一天时柱的子时也归属到新的一天。程序里如果直接拿公历日期去查日柱就会产生一个非常隐蔽的问题大部分时间看起来是对的但一到每天 23:00 到 24:00 之间奇门的局数、大六壬的四课就可能整体错位。这种错位在测试用例里很容易漏掉因为你大概率不会刻意去测“深夜 23 点”这个边界。我在项目里专门写了一组边界测试覆盖 23:00、23:59、00:00 三个时刻才把这个坑彻底堵上。2.3 真太阳时与节气时刻术数用到的“时辰”理论上应该以真太阳时为准而不是北京时间。北京时间是东经 120 度的平太阳时如果你在西部某地实际的真太阳时可能比北京时间晚一两个小时这会导致时辰的判断完全变化。程序里要做两件事一是支持“北京时间”和“真太阳时”两种模式让用户自行选择二是内部统一使用东八区时间作为默认基准避免服务器部署在不同地区时出现时区偏移。节气时刻同样要用权威数据源不能靠“大约几号”来估算因为奇门定局、大六壬换月将都卡着节气的具体时刻差几分钟都可能判到不同的元或不同的将。3. 奇门遁甲排盘的程序化拆解3.1 定局三种流派怎么选奇门遁甲的第一步是定局数。局数按节气划分冬至到夏至前用阳遁夏至到冬至前用阴遁每个节气又分上、中、下三元对应三组局数。但这里有个流派问题置闰法、拆补法、茅山法三种定局方式得到的局数可能不一样。置闰法在芒种、大雪之后置闰解决“超神接气”的问题规则最传统但实现复杂。拆补法按节气当天及符头所属的元来拆补局数不置闰规则相对直接。茅山法完全按节气交接时刻切割节气到了就进入下一元不管符头最简单。我最终默认使用拆补法因为它在经典性和可实现性之间比较平衡。程序里把定局逻辑单独抽成一个模块后续如果要切换流派只需替换这一层。3.2 地盘三奇六仪的布法定局之后就要在地盘九宫格中布三奇六仪即“戊、己、庚、辛、壬、癸、丁、丙、乙”这九干。核心规则是阳遁从局数对应的宫位开始顺飞阴遁逆飞。比如阳遁一局戊落在坎一宫然后按洛书九宫的顺序依次排己、庚、辛、壬、癸、丁、丙、乙阴遁九局则是从离九宫开始逆布。程序实现时我建议把洛书九宫的固定顺序做成一个常量数组然后用一个偏移量来决定起点下标再根据阴阳遁选择遍历方向。这一步几乎不会出逻辑错误容易出错的往往是“局数”和“宫位”的对应关系比如阳遁一局和阴遁一局的起始宫位不同写的时候很容易顺着惯性复制错。3.3 值符、值使与天地人神四盘地盘布完接着要按当前时干支找旬首。时干支属于哪个旬决定了旬首六仪是什么然后看旬首六仪在地盘落在哪一宫这个宫位原本的九星就是值符星原本的八门就是值使门。接下来的核心操作是把值符星转到“地盘时干所在宫”这一步叫“飞值符”。值符星落在新宫位后其余八星按照阴阳遁的顺逆方向依次布入九宫。同理值使门需要从旬首宫起按局数顺飞或逆飞数到时支所在宫再落门其余八门再按固定顺序布列。八神的排法也类似值符神先落在值符星所在的宫其余按顺逆排列。程序里的关键技巧是把“宫位移动”实现为纯函数输入起点宫位、方向、步数输出目标宫位。不要把顺逆的判断散落在各个排盘函数里否则改一个规则要动四五处代码。3.4 空亡与马星的标注奇门盘的最后一步是标注空亡和马星。空亡由日柱的旬决定比如甲子旬空戌亥甲戌旬空申酉依此类推。被空缺的宫位在断事时会代表“暂时无应、事情落空”等信息。马星通常按“申子辰马在寅、亥卯未马在巳、寅午戌马在申、巳酉丑马在亥”来定。这些都属于辅助标注程序上就是几个查表函数但需要确保它们依赖于正确的日支和时支不少排盘不一致的案例追根溯源都是因为空亡用了错误的日柱。4. 大六壬排盘的程序化拆解4.1 月将与占时大六壬的起点大六壬排盘的第一步是确定月将和占时。月将本质上是太阳所在的位置传统上按节气换将每个月将对应一个地支。比如登明亥、河魁戌、从魁酉、传送申、小吉未、胜光午、太乙巳、天罡辰、太冲卯、功曹寅、大吉丑、神后子依太阳过宫时刻切换。程序里最稳妥的做法是依赖历法库或天文数据算出太阳黄经再判断当前属于哪个将。占时的选择则需要和奇门一样最后落到“真太阳时/北京时间”两种模式上。我在实际开发中把“月将”和“占时”做成了两个独立对象因为它们的来源不同一个来自天文计算一个来自用户输入或当前时间混在一起会让后续的天地盘逻辑很混乱。4.2 天地盘与四课的构建大六壬的天地盘口诀是“月将加时方得天盘”。具体说把月将加到地盘占时所在的宫位然后按地支顺时针方向依次布列其余天盘地支。这里的地盘就是固定的十二地支宫位天盘则随月将和占时转动。有了天地盘就能起四课。第一课看日干寄宫的天盘神第二课看这个天盘神再往上数的天盘神第三课看日支上面的天盘神第四课同样看它的上神。四课的“上神”逻辑本质上是在天地盘之间做连续取数程序上可以写成一个“取某宫天盘神”的工具函数反复调用避免每课各写一段逻辑。4.3 三传九宗门递归判定是核心难点四课之后取三传是最容易让人崩溃的部分。九宗门的判定顺序是固定的贼克、比用、涉害、遥克、昴星、别责、八专、伏吟、返吟。程序实现时我建议把它写成一个按顺序触发条件的函数链先检查四课中有没有下贼上或上克下有的话进入贼克和比用逻辑没有的话继续判断涉害再没有就判断遥克、昴星以此类推。这里最关键的是“涉害”的深度比较。涉害需要比较各课受克或克他的次数再结合孟仲季来确定初传。初传定了中传和末传又分别按规则取支上神或干上神。这个过程手排都经常出错程序里如果不加注释过两周自己都看不懂所以我把每一步的“选择理由”都存进了结果对象里比如“因甲日见子辰上克下多者取用”这类备注方便后面回溯验证。4.4 空亡、遁干与年命的扩展维度大六壬盘面除了三传四课通常还会标注空亡、遁干、年命等信息。空亡同样由日柱决定与奇门完全不同它影响三传和四课的“应期”判断。遁干是在天盘地支上配天干用来做更细的干支分析。年命则需根据出生年、行年等信息填实空亡。这些扩展项虽然不直接影响初传的推导但直接影响断事时的解读。我不建议把它们塞进核心排盘流程里而是作为盘面数据的附加字段按需计算和展示这样核心逻辑的测试粒度会更小、更容易定位问题。5. 工程化实现与结果校验5.1 模块分层别把规则和展示混在一起在工程上我坚持把项目拆成三层历法/基础层负责公历转干支、节气、真太阳时等。术数规则层奇门定局、六壬三传等。展示层九宫格、课传表的渲染。这样拆的好处是展示层怎么改都不影响计算结果。我第一次写这个项目时为了省事把九宫格的渲染逻辑直接写在排盘函数里结果一换前端框架整个排盘逻辑全要跟着动。后来老老实实把盘面抽象成结构化的 JSON 数据前端只负责把 JSON 画出来两边彻底解耦。顺带一提盘面数据最好统一用“宫位类型标签”的结构而不是一堆散落的数组。比如奇门九宫格中的每个宫位包含原始的九星、八门、八神、三奇六仪等标签大六壬则用课传对象嵌套四课和上下神。这样既方便测试也方便后续做断语功能。5.2 用“金标准”批量对比排盘结果排盘程序最怕“看起来对实际上错”。我强烈建议准备一组“金标准”数据来源可以是目前主流的排盘网站、专业排盘 App或者自己手工排出来的几个经典盘例。具体做法生成一批随机时间点可能覆盖不同节气、不同时辰、不同早晚子时边界然后分别用程序和金标准工具排盘把结果 JSON 化后做字段级 diff。我第一次跑这个对比时一下抓出三个问题一个是奇门的八门排布方向反了一个是六壬中涉害深度比较写错了还有一个是空亡的日柱来源没统一。没有这套对比流程这些问题单靠肉眼很难发现。5.3 日志与复盘每个中间量都要可见排盘这种多步骤计算中间量非常关键。奇门的局数、旬首、值符值使六壬的月将、占时、初传每一个中间量都应该在日志或调试信息中展示出来。我习惯在计算结果的 JSON 里加一个steps字段记录每一步计算的关键结果。这样用户拿到的不仅是一张盘还有一张“推导过程表”。遇到和权威结果不一致时直接对比 steps 就能快速定位是哪一步产生了分歧比盲改代码高效太多。6. 高频问题与排查实录6.1 高频问题速查表我在使用和开发过程中整理了一份高频问题速查表供大家参考问题现象常见原因排查方向奇门局数整体差一局定局流派不一致或符头判断错误检查当日日干支、三元归属深夜排盘结果与白天不连续未处理晚子时日柱换日检查 23:00 后日柱、时柱大六壬四课错位一天占时或日柱取错检查是否用了公历零点换日奇门天盘星方向相反阴阳遁顺逆配置反了对照标准例验证一局值符值使找不出来旬首六仪与地盘宫位对应错误打印旬首、时干落宫中间量月将偏差导致三传全错月将换将时刻不准核对太阳黄经或节气数据源这种表格每次排查完一个问题就补一行慢慢就变成了自己的排错手册。6.2 三个让我排查到深夜的经典问题第一个问题是奇门定局差一局。现象是大部分日期都和标准工具一致但每隔几天就整体差一局。最后发现是“拆补法”的符头判断写错了。我一开始直接用“当日是否甲己日”来判断三元但漏了日支的进一步区分子午卯酉、寅申巳亥、辰戌丑未导致一部分日子被分到错误的元。修正后局数恢复一致。第二个问题是大六壬在每晚 23 点到 24 点之间排出来的盘和标准工具完全不同。我把历法层单独测试时日柱已经换了但四课起课时还是拿旧的日柱去做“日干寄宫”相当于日柱和时柱来自两个不同的“基准日”结果自然错。这个问题让我明白三式排盘里“日干、日支、时支”必须来自同一条干支时间线不能各自独立取数。第三个问题是奇门天盘九星整体方向反了。原因是定义九宫顺序时我用的数组是“坎一、坤二、震三……”按洛书宫位顺序但在“阳遁顺飞”的实现里误把数组正向遍历当成顺飞而实际上顺飞应该按洛书九宫的次序走逆飞才按数组反向走。一正一反搞反之后所有宫位全部镜像。6.3 我常用的三步验证法验证一个排盘功能是否靠谱我一般走三步第一步选一个自己手排过、有把握的标准盘例比如某个节气的整点时刻手工推算局数和初传程序结果必须完全一致。第二步选几个边界时刻做自动化测试包括 23:00、23:59、00:00、节气交接前后一分钟以及闰秒不存在的常规情况。边界时刻最容易暴露“基准日”问题。第三步随机生成数十个时间点与外部工具批量对比并打印中间量差异。这一步不仅能验证结果还能帮我发现规则层面的派别差异比如拆补法和置闰法在某个时间点上天然结果不同程序里必须明确标注用的是哪种规则。7. 从排盘到解盘的后续扩展程序能把盘排出来只是第一步。真正有价值的东西是在盘面上做解读。奇门可以继续做用神落宫、门迫、入墓、击刑、天盘地盘生克分析大六壬可以继续做三传的十二长生、空亡填实、神煞组合。这些不是排盘算法的问题而是断语系统的设计问题。我在项目后续的规划里打算把“排盘内核”和“断语模块”拆分成两个独立项目。排盘内核只负责计算出准确、可复现的盘面数据断语模块则基于盘面数据写规则比如“开门落坎宫逢空主文书拖延”这类条件判断。两者通过 JSON 盘面数据通信这样断语模块的规则维护不会污染排盘核心代码。从我的经验来看做排盘类项目最忌讳的是“一开始就想做全”。先把奇门或六壬中的一种做到和权威工具批量对比无差异再考虑扩展第二种。qimen_star-master 这个项目给我最大的启发不是它实现了多少功能而是它让我意识到术数规则的本质是几千年前沉淀下来的一套“决策算法”用程序去复刻它本身就是一次对规则的深度理解。最后再分享一个小技巧排盘代码的注释一定要写得像给另一个术数爱好者看的而不是给编译器看的。因为排盘规则的每一步都对应一个传统口诀或取用逻辑把“为什么这么计算”写进注释下次维护时你会感谢当时的自己。本文还有配套的精品资源点击获取
返回列表