FEATURED · 精选文章

大六壬与奇门遁甲排盘引擎的算法设计与工程实践

发布时间 / 2026/9/1 21:58:51
来源 / 创域科博编辑部
栏目 / 资讯中心
大六壬与奇门遁甲排盘引擎的算法设计与工程实践 简介本资源是一个基于纯JavaScript实现的在线玄学排盘工具面向易学爱好者、传统文化研究者及初学者解决奇门遁甲与大六壬人工排盘计算繁复、易出错、学习门槛高等实际问题。项目支持网页端即时运行无需后端或安装依赖用户输入时间参数即可自动生成动态盘面涵盖九宫、八门、九星、八神奇门及天地人三盘、五行生克推演大六壬兼顾原理准确性与交互友好性。压缩包为404KB的ZIP文件主体为HTML、CSS与JS源码文件其中JS逻辑实现核心算法HTML提供可视化盘面渲染CSS保障跨浏览器显示效果结构简洁、注释清晰便于二次开发与教学拆解。目前已有1086人学习下载读者可直接部署使用、深入理解排盘算法逻辑、对照古籍验证推演规则亦可作为传统文化数字化实践的教学案例与技术参考。 排盘工具做到后面真正难的已经不是起盘那一下而是怎么把大六壬和奇门遁甲这两套完全不同的推算体系用同一套代码逻辑稳定地跑出来。我之前在整理 qimen_star-master 这个项目的时候最大的感受就是市面上的排盘源码零零散散要么只做奇门要么只做六壬能同时把两套盘法都处理得比较干净的很少见。这篇文章就围绕 qimen_star-master 这个项目把大六壬排盘和奇门遁甲排盘背后的核心计算链路、工程落地方式以及实际排盘中特别容易踩的坑完整梳理一遍。无论你是想自己写一个排盘工具还是单纯想搞明白这两个术数体系在计算机里到底是怎么被还原出来的这篇文章应该都能给你一个比较扎实的参考。1. 先搞清楚 qimen_star-master 在解决什么问题1.1 大六壬和奇门遁甲共享的底层难题很多人一开始会以为大六壬和奇门遁甲是两套完全独立的系统代码上分开写就行。实际上不是的。它们虽然推算方法不一样但底层共享了好几个颇为麻烦的基础设施干支历法、二十四节气、真太阳时校正、农历与公历的转换。这些基础数据只要有一步偏差后面的盘面就会跟着错而且错得相当隐蔽。比如奇门遁甲的超神接气和置闰大六壬的月将起例这些都属于差之毫厘、谬以千里的典型环节。qimen_star-master 这个项目把两套体系放在一起核心价值就在于它复用了同一套经过校验的历法底层再在之上分别构建六壬和奇门的推导引擎。这样既避免了重复开发也保证了干支、节气、时辰这些基础数据的一致性。我在实际使用中最大的体会是在做排盘类项目时历法层真的是重中之重几乎百分之八十的排盘错误都来自底层的历法数据偏差而不是上层推算逻辑的问题。1.2 这个项目能覆盖哪些实际场景从使用场景来看qimen_star-master 比较适合三类人。第一类是研究传统数术文化的爱好者想通过工具快速排出盘面而不是每次手动查表推算。第二类是开发者想在现有源码基础上扩展功能或者参考它的算法结构来实现自己的排盘模块。第三类是做咨询类应用的产品经理需要把排盘能力集成到 App 或小程序里这时候一个结构清晰的引擎比什么都重要。我自己在实际用下来的感受是这类项目的难点往往不在单个盘法的推算而在多套盘法如何统一处理输入输出。比如大六壬需要用月将加时起天地盘奇门遁甲需要用节气定局数它们的输入参数有交集但又不完全相同。qimen_star-master 在处理这一层时做得比较聪明它把输入标准化成公历时间 地理经纬度 性别可选然后由引擎内部根据盘法类型自动换算所需要的历法要素对外暴露统一接口。这个设计思路值得借鉴。2. 大六壬排盘的核心算法链路天地盘、四课、三传2.1 月将加时起天地盘为什么这一步是六壬的坐标原点大六壬的推算流程可以概括为起月将、加时、布天地盘、发四课、定三传、配天将、布遁干、析神煞。其中月将加时布天地盘是第一步也是最关键的一步。天地盘定错了后面四课三传全盘皆错。天地盘的概念可以这样理解把十二地支分布在一个圆盘上固定不动的地盘代表地可以旋转的天盘代表天。地盘在十二地支的固定位置上始终保持不变天盘则根据月将加临到特定时辰的地支上。换句话说天盘是将月将太阳在赤道上的过宫位置加在地盘上的一个重要技术步骤。所谓月将指的就是太阳在黄道十二宫的位置每个月中太阳所在的位置不同对应的月将也不同。具体计算时月将按照太阳过宫来确定。比如雨水后太阳过亥宫春分后太阳过戌宫这种顺序。但在实际排盘中大多数工具简化采用中气过宫的规则即从某个中气开始用对应的月将。qimen_star-master 在处理这一步时采用的是比较通行的方法根据当前的节气判断太阳所在的宫位然后确定月将。这里有一个特别容易出错的地方就是节气交接的临界时刻。如果在节气交接的那个时辰排盘前后一分钟月将可能完全不同盘面也会随之改变。所以排盘必须记录到具体的分钟级别不能只精确到日。我自己的验证经验是在写完月将计算代码后一定要专门跑一遍节气交接时刻的测试用例比如立春、雨水、春分等关键节点把交接前后各一小时的排盘结果拿来对比确保月将切换的逻辑在临界时刻是正确且稳定的。2.2 四课和三传的推导顺序与易错点天地盘布好之后下一步就是发四课。四课的本质是把日干支和天地盘结合起来形成四个层次的信息。这里用到的日干支是基于节气排出来的日柱。这就涉及到另一个容易出错的问题日干支的切换时刻到底是子时初还是子时正。传统术数里对这个问题有争议有些派别以子时初23:00作为日的分界有些以子时正00:00作为分界。qimen_star-master 在实现时选择了可配置的方式默认采用子时初换日但可以通过参数切换为晚子时换日规则。这种做法比较务实因为不同流派、不同使用场景下的要求不一样硬编码成一种反而限制了工具的适用性。四课的具体推导方法是先确定日干和日支然后根据日干的阴阳属性确定寄宫。因为十天干在十二地支并不一一对应需要寄居在不同的宫位。接着从日干寄宫的天盘起点出发按顺序取日干、日支的阴阳配上天地盘生克关系推演出第一课、第二课、第三课和第四课。在实际编码时四课本身不太容易出错真正容易出错的是三传的推导。三传分为贼克法、比用法、涉害法、遥克法、昴星法、别责法、八专法等多种。到底用哪种方法取决于四课中是否有上下克、是否有相同的克、是上克还是下克等情况。比如初传从下贼上或者上克下判断方向不同选取的规则也不同。我记得初次实现三传算法的时候最头疼的是涉害法。它的计算最复杂需要比较每个受克的地支在地盘上经过的涉害深浅取涉害深的作为发用。这个过程在手工排盘时已经很绕在代码里实现时更需要谨慎地处理回溯逻辑。qimen_star-master 在处理这种复杂分支时写法上比较规范把每种三传方法都拆成了独立的函数便于单测验证。如果你打算自己实现我非常建议也这样做。因为三传的判断分支太多如果全部揉在一个大函数里后面一旦发现边界场景出错排查起来会非常痛苦。3. 奇门遁甲排盘的九宫与节气映射从局数到局象3.1 阴阳遁与局数的计算逻辑奇门遁甲的排盘比大六壬多一层局数的概念。局数分为阳遁和阴遁阳遁顺布六仪三奇阴遁逆布六仪三奇。确定局数的依据是节气和日干支共同决定。每年有二十四节气每个节气又分为上中下三元每一元对应一个局数。这就是所谓节气定局法也是最基础的起局规则。阳遁的局数从冬至开始阳气初生所以从一局开始逐渐递增阴遁的局数从夏至开始阴气渐长从九局开始逐渐递减。这里特别需要注意的是阴阳遁的判断不是按照公历月份来的而是严格按照节气的更替。冬至到夏至之间用阳遁夏至到冬至之间用阴遁。哪怕公历已经是十二月底只要还没到冬至节气仍然使用的是阴遁局数。节气和局数的映射关系简单来说一个节气十五天分上中下三元每元五天。上元对应一个局数中元、下元对应另外的局数。比如冬至的上元是阳遁一局中元是阳遁七局下元是阳遁四局。这个局数不是随意定的里面有洛书九宫和六十甲子纳音的逻辑在里面。编程序的时候最稳妥的方式是提前把二十四节气各元对应的阴阳遁局数做成一张映射表而不是现场推导因为现场推导的规则极其繁琐而且极易出错。qimen_star-master 使用的是映射表 动态校验的方式。映射表负责提供基准局数动态校验负责在节气临界点判断当前时间属于上一节气还是下一节气然后决定是否切换局数。我实际测试过只要节气交接时刻的判断逻辑没问题局数的正确率就能保证在绝大多数情况下不出错。反而容易出错的是交接时刻本身前后一秒局数可能直接从阳遁一局变成阳遁七局这种瞬间切换如果不做秒级校验很容易出现边界问题。3.2 地盘、天盘、人盘、神盘的四层叠加奇门遁甲起局后盘面由多个层次构成地盘、天盘、人盘门盘、神盘八神再加上九星。这也是奇门排盘实现中最形象直观、却又最容易搞混的环节。地盘是九宫的基础布局按照局数顺布或逆布六仪三奇天盘是在地盘基础上根据值符和时干的位置旋转叠加人盘是八门神盘是八神。从天文学和历法学的角度看天盘叠加的本质是值符随时干转——把当前时辰的天干所在宫位作为基准让值符星飞临该宫其他星依次排布。这个转的动作在代码里本质上是一个数组的循环移位问题。九宫可以抽象成一个一维数组索引从 0 到 8 分别代表坎一宫、坤二宫、震三宫、巽四宫、中五宫、乾六宫、兑七宫、艮八宫、离九宫。然后按照阳遁顺转、阴遁逆转的规则将值符星从原始位置移到目标位置其余星也跟着整体平移。这里有一个常见的错误认知就是以为中五宫没有对应的星和门所以在编程时容易跳过中五宫。实际上中五宫在寄坤二宫的原则下仍然有对应的天禽星和死门只是寄生在坤二宫。如果代码里直接把中五宫留空后续的八门排列就会跟着错位。我在很多开源项目里都见过这个问题表现是某个时辰起局后八门的排列和传统排盘对不上查到最后发现是中五宫的寄宫处理出了问题。3.3 值符、值使的动态排布逻辑奇门遁甲除了天地人神四层盘之外还有两个非常核心的动态元素值符和值使。值符是六甲旬首所对应的九星之一值使是六甲旬首所对应的八门之一。它们的排布逻辑比较复杂因为它们不是固定在某一个宫位的而是根据当前的旬首以及时干、时支的位置动态飞布。值符的落宫逻辑可以这样理解先找到当前时辰属于哪一旬也就是找到旬首。旬首确定后值符星也就确定了。然后根据时干所在的宫位把值符星飞到这个宫位。这个飞的过程在奇门遁甲里有飞宫法和转宫法两种流派。飞宫法是按九宫飞泊顺序排列转宫法是按后天八卦的原始宫位顺序旋转排列。两种方法排出来的盘面在部分时辰会有差异。qimen_star-master 默认采用转宫法同时保留了飞宫法的选项。我在实际使用中比较建议你在集成时根据自己要使用的流派来确定选择不要两种混用否则盘面解读时很容易出现前后矛盾。值使的排布稍微复杂一些。值使门也是从旬首落宫开始然后按照时支的顺序阳遁顺行、阴遁逆行一步一步走到时辰对应的宫位。这个走的过程在代码里可以用循环步进的方式实现。需要小心的点是值使走宫的起点和方向是否和旬首、阴阳遁匹配一致。我在调试过程中发现最容易出错的地方是旬首本身也参与走宫导致值使的初始位置偏了一位。这个问题在传统的排盘书籍里写得比较模糊代码实现时尤其需要留意。4. 排盘引擎在工程上怎么落地qimen_star-master 的关键设计选择4.1 历法数据的三层结构前面说过历法层是一切排盘的基础。qimen_star-master 在工程上把历法数据做成了三层结构输入层、标准时间层、干支层。输入层接收用户的公历时间字符串格式包括年月日时分标准时间层负责把输入时间转换为内部统一的 UTC 时间戳同时考虑时区偏移干支层则基于标准时间计算年柱、月柱、日柱、时柱以及当前节气所处的时段。这种分层的好处是每一层都可以独立测试。比如你可以只测试公历转干支的逻辑而不需要关心后面的排盘是否正常。对于排盘类项目来说这种可测试性非常重要因为干支历法的逻辑非常繁琐涉及大量查表和闰余计算如果没有分层故障定位会非常困难。在干支计算方面qimen_star-master 采用了类似基准日 偏移的方式来计算日干支。具体来说先确定一个已知的基准日比如某个已知干支的日子然后计算目标时间与基准日之间的天数差再以六十甲子为模数推算出目标日的干支。这个方法在工程上最简单、也最不容易出错。如果只依赖公式直接从年月日推导日柱反而会因为年首、月首的不同定义而出现偏差。4.2 真太阳时容易被忽略却必须做的计算排盘中有一个公认的细节按时辰排盘原则上应该使用真太阳时而不是钟表时间。因为中国幅员辽阔不同经度在同一钟表时刻的真实太阳位置是不同的。比如北京和乌鲁木齐同样的北京时间上午 10 点真太阳时可能相差两个小时以上。如果直接按照北京时间排盘那么很多时辰的划分会出现偏差导致整个盘面错误。真太阳时的计算思路是先根据当地经度修正得到平太阳时再叠加均时差修正得到真太阳时。均时差的原因是地球公转轨道是椭圆形的导致真太阳日的长度在一年中并不均匀。这个数值大概在 -14 分钟到 16 分钟之间波动。工程实现时均时差可以通过经验公式近似计算精度足够用于排盘场景。qimen_star-master 在真太阳时这一块的处理比较成熟。它要求传入经纬度默认提供一些常见城市的经纬度表。如果用户没有指定城市则默认按照东经 120 度处理也就是北京时间对应的经度。我在实际项目中使用的最多的是传入城市经纬度来自动化处理因为这样可以减少用户手动配置的成本。需要注意的是如果用户只是粗略选择城市而非精确经纬度城市的中心坐标和用户的实际位置之间可能还存在一定误差在很多情况下并没有太大影响但在时辰临界点上几分钟的误差就可能导致时辰判断错误。4.3 时辰的边界处理早子时与晚子时时辰这一层也有一个经典的边界问题一天十二个时辰中子时横跨了两天。古代历法里子时通常被分为早子时和晚子时。晚子时指的是 23:00 到 00:00 这段时间早子时指的是 00:00 到 01:00 这段时间。问题在于晚子时的日柱到底用当天的日柱还是用第二天的日柱不同流派有不同的处理方式。有的流派认为晚子时仍然属于当天日柱不变有的流派认为晚子时已经进入第二天日柱应该用后一天的干支。qimen_star-master 在实现时提供了一个dayBoundary参数默认为 23:00也就是把 23:00 作为换日线。你也可以把它改为 00:00按照晚子时不换日的方式来处理。我在实际使用中发现处理早子时和晚子时最重要的是保持一致性。排盘工具的算法可以默认某一种规则但要保证输出结果里盘面信息和时辰信息是互相自洽的。否则用户拿着排好的盘去对照传统书籍会发现日柱和时柱的矛盾那就很尴尬了。所以这里的最佳实践是在排盘结果中显式标注当前使用的是哪种换日规则让用户或调用方明确知晓。5. 排盘结果如何解读从盘面输出到逻辑推断5.1 大六壬的类神定位神煞与十二天将排盘本身只是第一步真正困难的其实是解读。代码可以高速生成盘面但盘面的意义需要通过解读规则来赋值。以六壬为例在盘面生成之后下一步通常是定位类神然后结合十二天将、神煞和四课三传的生克关系进行推断。十二天将是大六壬中非常关键的一个要素它们根据日干来确定。例如甲日青龙乘贵登天门等特定组合会有不同的象意。在实际代码中十二天将可以做成一个映射表根据日干的阴阳和奇偶来排布。不过这块已经超出了排盘本身的范围更多是推断逻辑。qimen_star-master 项目在盘面输出时会把十二天将完整列出为后续解读提供准备数据但它不会替你做完整的断事分析。我觉得这个边界划分得挺好因为解读逻辑太依赖流派和具体问题工具只负责把盘面信息完整、准确地呈现出来至于怎么解读那是使用者的事。5.2 奇门遁甲的用神取用从盘面到决策奇门遁甲的解读比六壬更依赖于用神的选择。所谓用神就是你根据所测事务的类型在盘面上选择一个或几个特定的符号作为判断的核心。比如测天气看天柱星和天英星测婚姻看乙庚关系测事业看开门和值符等。这些用神规则在 qimen_star-master 的盘面输出中都有对应的字段方便使用者快速定位。我在尝试写奇门断事模块时最大的体会是必须先把盘面数据映射成一套结构化的对象比如Palace、Star、Door、God、Element等然后再在对象之上写推断规则。如果直接从原始数组里取数据写规则代码的可读性和可维护性都会很差。qimen_star-master 在输出层面已经做了这种对象化处理九星、八门、八神、六仪三奇等元素都以结构化格式呈现这给上层应用省了不少功夫。5.3 干支冲合与刑冲破害的编码实现干支关系也是解读过程中的常见操作。干支之间存在六合、三合、六冲、相刑、相害、相破等多种关系。这些关系在排盘输出时通常不会直接给出而是需要调用方根据干支自行判断。如果你后续要扩展断事功能最好把这套关系引擎也实现出来而不是硬编码在业务逻辑里。我在自己的项目里是把干支关系做成了一个单独的模块输入两个干支输出它们之间的关系类型。这样既可以被六壬模块调用也可以被奇门模块调用。qimen_star-master 虽然没有把断事规则做得很深但它输出的盘面数据已经包含完整的干支信息让上层可以自己扩展。这种排盘引擎 推理引擎分离的架构对长期演进来说是非常友好的。6. 实测几个易错场景与避坑建议6.1 节令交接时刻的排盘测试集我在测试 qimen_star-master 时专门做了一组边界场景测试集全部围绕节气交接时刻和时辰临界点展开。比如立春前 10 分钟、立春后 10 分钟冬至前 10 分钟、冬至后 10 分钟晚上 22:50 和 23:10 的对比等。这类测试非常重要。因为排盘工具在上线之后真正被用户质疑最多的就是我的盘是不是排错了。而排错的原因往往集中在这些边界瞬间。如果能在开发阶段就把这些边界点用自动化测试固定下来后续每次修改历法逻辑或排盘算法时都能快速回归验证避免旧问题复发。我建议每一年把二十四节气的精确时间点都整理成一份测试 JSON 文件每次排盘测试时把节气交接点前后各三十分钟的排盘结果拿出来对比。重点检查三项月将是否正确切换、奇门局数是否正确切换、日柱是否在子时边界正确切换。6.2 用户输入时区的常见误解排盘工具输入的公历时间到底采用什么时区是一个经常被忽略的问题。很多用户以为自己是按北京时间输入的实际上如果用手机在非东八区使用系统时间和北京时间可能已经有偏差。qimen_star-master 在输入层做了一处比较贴心的设定默认按东八区处理同时允许用户传入自定义时区偏移。这样可以覆盖更多海外用户的使用场景。不过有一个需要特别注意的点真太阳时的计算需要的是当地时间而用户输入的往往是标准时区时间。所以正确的流程是先把用户输入的标准时区时间转换成当地平太阳时再叠加均时差修正。如果跳过平太阳时修正直接拿标准时区时间和经度去算结果会有一定误差。6.3 盘面保存与结果复现最后一个容易踩的坑是盘面结果的保存与复现。排盘结果是基于输入时间实时计算的但同样的时间、同样的经纬度如果算法版本升级可能排出来的盘面细节会略微不同尤其是涉及到某些流派选项变化时。为了确保同一个盘面可以在后续解读、分享或审计时保持稳定最好在生成盘面时把关键输入参数和算法版本号一并保存下来。qimen_star-master 的输出结果比较规整包含了输入时间、经纬度、历法信息、排盘结果等多个字段。我在自己的方案里是在此基础上增加了一个versionId字段用于标记算法版本。这样即使在后续版本升级后老盘面也能准确复现当时的计算逻辑。对于长期使用或对接业务系统的场景来说这个字段几乎是必需的。排盘工具的开发难点从来不在于短期的功能实现而是长期的稳定与可解释。一个能在边缘时刻保持正确、在版本演进中保持可追溯、在输入输出上保持自洽的排盘引擎才能真正称得上可用。以上是我在实际开发和测试 qimen_star-master 这个项目过程中总结到的一些关键问题和应对经验供同样在做这类工具的朋友参考。本文还有配套的精品资源点击获取
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻