中华传统术数计算引擎
八字 · 紫微斗数 · 六爻 · 梅花易数 · 大六壬 · 奇门遁甲
MingPan 是一个纯计算的中华传统术数排盘引擎,提供六大术数系统的完整排盘能力:
| 术数系统 | 说明 | 核心能力 |
|---|---|---|
| 八字 (BaZi) | 四柱命理,最广泛使用的命理体系 | 四柱排盘、十神分析、神煞、格局、大运流年 |
| 紫微斗数 (Ziwei Doushu) | 星曜命理,以宫位和星曜为核心 | 十二宫位、星曜亮度、四化、大限流年 |
| 六爻 (Liuyao) | 周易占卜,以铜钱摇卦为基础 | 纳甲排盘、六亲六神、伏神进退神、旺衰 |
| 梅花易数 (Meihua) | 邵雍创立的简易占法 | 时间起卦、数字起卦、互卦变卦、体用分析 |
| 大六壬 (Daliuren) | 三式之一,以日辰为基础 | 天地盘、四课、三传、神煞 |
| 奇门遁甲 (Qimen Dunjia) | 三式之一,古代军事决策术 | 转盘/飞盘、九宫、八门九星八神、用神分析 |
不依赖任何外部 API 或数据库 — 所有计算在本地完成,零网络请求。
- 纯计算:不发请求、不存数据、不联网。你的命盘数据永远不会离开你的机器
- TypeScript 原生:完整类型定义,IDE 自动补全
- 双输出格式:结构化 JSON 数据 + 可读 Markdown 文本
- 农历支持:自动处理农历/公历转换和真太阳时校正
- 易于扩展:模块化架构,每个术数系统独立可替换
npm install mingpan
# 或
pnpm add mingpan
# 或
yarn add mingpanimport { calculateBazi } from 'mingpan';
const result = await calculateBazi({
year: 1990,
month: 5,
day: 15,
hour: 10,
gender: 'male',
});
console.log(result.text); // Markdown 格式的排盘文本
console.log(result.data); // 结构化 JSON 数据import {
calculateBazi, // 八字
calculateZiwei, // 紫微斗数
calculateLiuyao, // 六爻
calculateMeihua, // 梅花易数
calculateDaliuren, // 大六壬
calculateQimen, // 奇门遁甲
} from 'mingpan';
// 八字 — 需要出生年月日时
const bazi = await calculateBazi({
year: 1990, month: 5, day: 15, hour: 10,
gender: 'male',
isLunar: false, // true 则按农历计算
});
// 紫微斗数 — 需要性别
const ziwei = await calculateZiwei({
year: 1990, month: 5, day: 15, hour: 10,
gender: 'male',
});
// 六爻 — 需要 6 个爻值 (6=老阴, 7=少阳, 8=少阴, 9=老阳)
const liuyao = calculateLiuyao({
yaoValues: [7, 8, 9, 7, 8, 6],
year: 2024, month: 5, day: 14, hour: 10,
});
// 梅花易数 — 支持时间起卦和数字起卦
const meihuaTime = calculateMeihua({
method: 'time',
year: 2024, month: 5, day: 14, hour: 10,
});
const meihuaNum = calculateMeihua({
method: 'number',
upperNumber: 3, lowerNumber: 7, yaoNumber: 5,
});
// 大六壬 — 需要节气和干支信息
const daliuren = calculateDaliuren({
jieqi: '立夏',
lunarMonth: 4,
dayGanZhi: '甲辰',
hourGanZhi: '庚午',
});
// 奇门遁甲 — 支持多种盘式
const qimen = calculateQimen({
year: 2024, month: 5, day: 14, hour: 10,
panType: '时盘', // 时盘 | 日盘 | 月盘 | 年盘
panStyle: '转盘', // 转盘 | 飞盘
zhiRunMethod: 'chaibu', // chaibu | maoshan
});每个 Service 类也可以直接使用,适合需要更细粒度控制的场景:
import { BaziService } from 'mingpan';
const service = new BaziService();
const result = await service.calculate({
year: 1990, month: 5, day: 15, hour: 10,
gender: 'male',
useLunar: false,
});
// result 包含完整的分析结构,不经过 text 渲染src/
├── index.ts # 统一入口,导出所有 calculate* 函数
├── mingpan/
│ ├── core/ # 基础算法层
│ │ ├── bazi/ # 八字核心:真太阳时、节气计算
│ │ ├── calendar/ # 历法:农历、节气、儒略日
│ │ ├── constants/ # 通用常量:天干地支、方位
│ │ ├── qimen/ # 奇门核心:飞盘规则、转盘规则
│ │ └── ziwei/ # 紫微核心:iztro 适配器、亮度系统
│ ├── services/ # 业务服务层(六大术数)
│ │ ├── bazi/ # 八字:10 个分析器 + 5 个计算器
│ │ ├── ziwei/ # 紫微:10 个计算器 + 宫位转换器
│ │ ├── liuyao/ # 六爻:7 个计算器
│ │ ├── meihua/ # 梅花:4 个计算器
│ │ ├── daliuren/ # 大六壬:4 个计算器
│ │ └── qimen/ # 奇门:12 个计算器
│ ├── output/ # 文本渲染器
│ ├── shared/ # 共享类型和日志
│ ├── types/ # 类型声明
│ └── utils/ # 工具函数(时间标准化、年龄计算)
└── examples/ # 使用示例
| 包 | 用途 |
|---|---|
iztro |
紫微斗数排盘引擎 |
lunar-javascript |
农历/公历转换、干支计算、节气 |
仅两个运行时依赖,零外部 API 调用。
万事皆有时,玄机须慢酿