// ****************************************************************** css
// 文件名:QiMenData.cs// Copyright (c)2013 洪銦八字 http://hybz.org
// 做者: hybzorg
// 建立日期: 2013-8-1
// 描述: 奇門盤實體類
// ******************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FateJudge.Core.Entity
{
public class QiMenPan
{
public DateTime time//時間
{
set;
get;
}
public string bazi//八字
{
get;
set;
}
public int jieqihao//節氣號
{
set;
get;
}
public string jieqi//節氣名
{
set;
get;
}
public string jiaojie//交節
{
set;
get;
}
//時辰
public string shichen
{
get;
set;
}
//時辰旬首
public string shichenxunshou
{
get;
set;
}
public int yuan//局元
{
get;
set;
}
public string yuanming//元名
{
get;
set;
}
public string juyinyan//局陰陽
{
get;
set;
}
public int jushu//局數
{
get;
set;
}
public string zhifu//值符
{
set;
get;
}
public int zhifugong//值符宮
{
get;
set;
}
public string zhishi//值使
{
set;
get;
}
public int zhishigong//值使宮
{
get;
set;
}
public string shikong//時空
{
get;
set;
}
public string rikong//日空
{
get;
set;
}
}
}
// ******************************************************************
// 文件名:QiMenData.cs
// Copyright (c)2013 洪銦八字 http://hybz.org
// 做者: hybzorg
// 建立日期: 2013-8-1
// 描述: 奇門數據定義
// ******************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FateJudge.Core.QiMen
{
public class QiMenData
{
public static int[] ShunZhuan = new int[] { 1, 8, 3, 4, 9, 2, 7, 6 };
public static int[] NiZhuan = new int[] { 1,6,7,2,9,4,3,8};
public static String[] jushu=new string[]{
"174","285","396",
"852","963","174",
"396","417","528",
"417","528","639",
"936","825","714",
"258","147","936",
"714","693","582",
"693","582","471"};
public static String qiyiyuanwei="戊己庚辛壬癸丁丙乙";//三奇六儀原位
public static String[] renpanxingyuanwei = new string[] { "休", "死", "傷", "杜", "死", "開", "驚", "生", "景" };//(八)九門原位
public static String[] tianpanxingyuanwei = new string[] { "蓬","芮","衝","輔","禽","心","柱","任","英"};//9星原位
public static String[] shenpanyuanwei = new string[] { "符","蛇","陰","六","白","玄","地","天" };//8神原位
public static String[] renpanxingzhuanxu = new string[] { "休", "生", "傷", "杜", "景", "死", "驚", "開" };//8門轉序
public static String[] tianpanxingzhuanxu = new string[] { "蓬", "任", "衝", "輔", "英", "芮(禽)", "柱", "心" };//9星轉序
public static String[] shenpanzhuanxu = new string[] { "符", "蛇", "陰", "六", "白", "玄", "地", "天" };//8神轉序
}
} 數組
// 文件名:QiMenPaiPan.cs
// Copyright (c)2013 洪銦八字 http://hybz.org
// 做者: hybzorg
// 建立日期: 2013-8-1
// 描述: 奇門排盤
// ******************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FateJudge.Core.Entity;
namespace FateJudge.Core.QiMen
{
public class QiMenPaiPan : Singleton<QiMenPaiPan>
{
public QiMenPan getQiMenPan(DateTime time)
{
QiMenPan qimenpan = new QiMenPan();
qimenpan.time = time;//排盤時間
string bazi = JieQiYueLing.Instance().getBaZi(time);
qimenpan.bazi = bazi;//八字
qimenpan.shichen = bazi.Substring(6, 2);
string xunshou = QiMenData.qiyiyuanwei[getXunXuShu(qimenpan.shichen)].ToString();
qimenpan.shichenxunshou = xunshou;
string rikong = getKongWang(bazi[4].ToString(), bazi[5].ToString());
qimenpan.rikong = rikong;
string shikong = getKongWang(bazi[6].ToString(), bazi[7].ToString());
qimenpan.shikong = shikong;
int jieqihao = (JieQiYueLing.Instance().getJieqiHao(time) + 1) % 24;//第幾個節氣從0開始,小寒和夏至匹配
qimenpan.jieqihao = jieqihao;
qimenpan.jieqi = JieQiYueLing.Instance().getJieQi(time);
qimenpan.jiaojie = JieQiYueLing.Instance().getJiaoJieRiQi(time);
string yinyan = string.Empty;
if (jieqihao > 10 && jieqihao < 23)
{
yinyan = "陰";//夏至用陰遁
}
else
{
yinyan = "陽";
}
qimenpan.juyinyan = yinyan;
int yuanshu = 0;
int gzc = (12 + CommData.zhi.IndexOf(bazi[5]) - CommData.gan.IndexOf(bazi[4])) % 12;//干支差求旬首
switch (gzc)
{
case 0:
yuanshu = 0;
qimenpan.yuanming = "上元";
break;
case 10:
yuanshu = 2;
qimenpan.yuanming = "下元";
break;
case 8:
yuanshu = 1;
qimenpan.yuanming = "中元";
break;
case 6:
yuanshu = 0;
qimenpan.yuanming = "上元";
break;
case 4:
yuanshu = 2;
qimenpan.yuanming = "下元";
break;
case 2:
yuanshu = 1;
qimenpan.yuanming = "中元";
break;
}
if (CommData.gan.IndexOf(bazi[4]) > 4)//若是天干爲己如下的幹元數加1
{
yuanshu = (yuanshu + 1) % 3;
}
qimenpan.yuan = yuanshu;//元數
int jushu = 0;
jushu = Convert.ToInt32(QiMenData.jushu[jieqihao][yuanshu].ToString());
qimenpan.jushu = jushu;//局數
int fushixushu = 0;
if (yinyan.Equals("陽"))
{
fushixushu = (jushu + getXunXuShu(bazi.Substring(6, 2)) - 1) % 9;
}
else
{
fushixushu = (9 + jushu - getXunXuShu(bazi.Substring(6, 2)) - 1) % 9;
}
qimenpan.zhifu = QiMenData.tianpanxingyuanwei[fushixushu];//值符
qimenpan.zhishi = QiMenData.renpanxingyuanwei[fushixushu];//值使
int zhifugong = 0;//值符落宮
string gan = getTiangan(bazi);//獲取時幹
if (yinyan.Equals("陽"))//陽順陰逆
{
zhifugong = (QiMenData.qiyiyuanwei.IndexOf(gan) + jushu - 1) % 9 + 1;
}
else
{
zhifugong = (9 + jushu - QiMenData.qiyiyuanwei.IndexOf(gan) - 1) % 9 + 1;
}
qimenpan.zhifugong = zhifugong;
int zhishigong = 0;//值使宮
if (yinyan.Equals("陽"))//陽順陰逆
{
zhishigong = (fushixushu + CommData.gan.IndexOf(bazi[6])) % 9 + 1;
}
else
{
int gn = CommData.gan.IndexOf(bazi[6]);
if (gn.Equals(0))//甲
{
zhishigong = fushixushu % 9 + 1;
}
else
{
zhishigong = (fushixushu + (9 - gn)) % 9 + 1;
}
}
qimenpan.zhishigong = zhishigong;//值使落宮
return qimenpan;
}
/// <summary>
/// 獲取天盤隱幹
/// </summary>
/// <param name="jushu"></param>
/// <param name="zhifugong"></param>
/// <param name="zhifu"></param>
/// <param name="ren"></param>
/// <returns></returns>
public string getTianPanYinGan(int jushu, string yinyan, int zhifugong, string zhifu, string tian)
{
string ret = string.Empty;
int n = 0;// (getRenPanGong(yinyan, zhishigong, zhishi, ren) - jushu + 9) % 9;
int yg = getStringArrayIndex(QiMenData.tianpanxingyuanwei, tian) + 1;
if (yinyan.Equals("陽"))//陽盤
{
n = (yg - jushu + 9) % 9;
}
else
{
n = (jushu - yg + 9) % 9;
}
ret = QiMenData.qiyiyuanwei[n].ToString();
return ret;
}
/// <summary>
/// 獲取人盤隱幹
/// </summary>
/// <param name="jushu"></param>
/// <param name="zhifugong"></param>
/// <param name="zhifu"></param>
/// <param name="ren"></param>
/// <returns></returns>
public string getRenPanYinGan(int jushu, string yinyan, int zhishigong, string zhishi, string ren)
{
string ret = string.Empty;
int n = 0;// (getRenPanGong(yinyan, zhishigong, zhishi, ren) - jushu + 9) % 9;
int yg = getStringArrayIndex(QiMenData.renpanxingzhuanxu, ren) + 1;
if (yinyan.Equals("陽"))//陽盤
{
n = (yg - jushu + 9) % 9;
}
else
{
n = (jushu - yg + 9) % 9;
}
ret = QiMenData.qiyiyuanwei[n].ToString();
//QiMenData.tianpanxingzhuanxu
return ret;
}
/// <summary>
/// 獲取人盤對應的原盤宮位
/// </summary>
/// <param name="jushu"></param>
/// <param name="yinyan"></param>
/// <param name="zhishigong"></param>
/// <param name="zhishi"></param>
/// <param name="ren"></param>
/// <returns></returns>
public int getRenPanGong(string yinyan, int zhishigong, string zhishi, string ren)
{
int ret = 0;
int n = getStringArrayIndex(QiMenData.renpanxingzhuanxu, ren);// - getStringArrayIndex(QiMenData.renpanxingzhuanxu, zhishi) + 8) % 8;
int n1 = 0;
n1 = (getIntArrayIndex(QiMenData.ShunZhuan, zhishigong) + n) % 8;
ret = QiMenData.ShunZhuan[n1];
return ret;
}
public int getIntArrayIndex(int[] sa, int n)
{
int ret = 0;
for (int i = 0; i < sa.Length; i++)
{
if (sa[i].Equals(n))
{
ret = i;
break;
}
}
return ret;
}
/// <summary>
/// 獲取字符串數組中某字符的索引
/// </summary>
/// <param name="sa"></param>
/// <param name="str"></param>
/// <returns></returns>
public int getStringArrayIndex(string[] sa, string str)
{
int ret = 0;
for (int i = 0; i < sa.Length; i++)
{
if (sa[i].Contains(str))
{
ret = i;
break;
}
}
return ret;
}
/// <summary>
/// 求天干,若是是甲幹找六儀
/// </summary>
/// <param name="bazi"></param>
/// <returns></returns>
public string getTiangan(string bazi)
{
string gan;
if (CommData.gan.IndexOf(bazi[6]).Equals(0))//若是是甲幹找六儀
{
int gn = 0;
gn = (20 - CommData.zhi.IndexOf(bazi[7])) / 2;
if (gn.Equals(10))
{
gn = 4;
}
gan = CommData.gan[gn].ToString();
}
else
{
gan = bazi[6].ToString();
}
return gan;
}
/// <summary>
/// 獲取干支旬序數
/// </summary>
/// <param name="gz"></param>
/// <returns></returns>
public int getXunXuShu(string gz)
{
int ret = 0;
int gzc = (12 + CommData.zhi.IndexOf(gz[1]) - CommData.gan.IndexOf(gz[0])) % 12;//干支差求旬首
if (gzc.Equals(0))
{
gzc = 12;
}
ret = 6 - (gzc / 2);
return ret;
}
/// <summary>
/// 獲取指定位置天盤
/// </summary>
/// <param name="yinyan"></param>
/// <param name="zhifu"></param>
/// <param name="zhifugong"></param>
/// <param name="p"></param>
/// <returns></returns>
public string getPostTianPan(string zhifu, int zhifugong, int p)
{
string ret = string.Empty;
int n1 = (getIntArrayIndex(QiMenData.ShunZhuan, p) - getIntArrayIndex(QiMenData.ShunZhuan, zhifugong) + 8) % 8;
int n2 = getStringArrayIndex(QiMenData.tianpanxingzhuanxu, zhifu);
int n3 = (8 + n2 + n1) % 8;
ret = QiMenData.tianpanxingzhuanxu[n3];
return ret;
}
/// <summary>
/// 獲取指定位置天盤
/// </summary>
/// <param name="yinyan"></param>
/// <param name="zhifu"></param>
/// <param name="zhishigong"></param>
/// <param name="p"></param>
/// <returns></returns>
public string getPostRenPan(string zhishi, int zhishigong, int p)
{
string ret = string.Empty;
int n1 = 0;
int n2 = 0;
int n3 = 0;
n1 = (getIntArrayIndex(QiMenData.ShunZhuan, p) - getIntArrayIndex(QiMenData.ShunZhuan, zhishigong) + 8) % 8;
n2 = getStringArrayIndex(QiMenData.renpanxingzhuanxu, zhishi);
n3 = (8 + n2 + n1) % 8;
ret = QiMenData.renpanxingzhuanxu[n3];
return ret;
}
/// <summary>
/// 獲取指定位置神盤
/// </summary>
/// <param name="yinyan"></param>
/// <param name="zhifugong"></param>
/// <param name="p"></param>
/// <returns></returns>
public string getPostShenPan(string yinyan, int zhifugong, int p)
{
string ret = string.Empty;
int n1 = 0;
if (yinyan.Equals("陽"))
{
n1 = (getIntArrayIndex(QiMenData.ShunZhuan, p) - getIntArrayIndex(QiMenData.ShunZhuan, zhifugong) + 8) % 8;
ret = QiMenData.shenpanzhuanxu[n1];
}
else
{
n1 = (getIntArrayIndex(QiMenData.NiZhuan, p) - getIntArrayIndex(QiMenData.NiZhuan, zhifugong) + 8) % 8;
ret = QiMenData.shenpanzhuanxu[n1];
}
return ret;
}
/// <summary>
/// //獲取空亡
/// </summary>
/// <param name="g">幹</param>
/// <param name="z">支</param>
/// <returns></returns>
public string getKongWang(string g, string z)
{
string ret = string.Empty;
try
{
int i = CommData.gan.IndexOf(g);
int j = CommData.zhi.IndexOf(z);
if (j < i)
{
j = j + 12;
}
switch (j - i)
{
case 0:
ret = "戌亥";
break;
case 2:
ret = "子醜";
break;
case 4:
ret = "寅卯";
break;
case 6:
ret = "辰巳";
break;
case 8:
ret = "午未";
break;
case 10:
ret = "申酉";
break;
}
}
catch (Exception ex)
{
throw ex;
}
return ret;
}
/// <summary>
/// 獲取指定位置地盤
/// </summary>
/// <param name="jushu"></param>
/// <param name="yinyan"></param>
/// <param name="p"></param>
/// <returns></returns>
public string getPostDiPan(int jushu, string yinyan, int p)
{
string ret = string.Empty;
int n = 0;
if (yinyan.Equals("陽"))
{ n = (p - jushu + 9) % 9; }
else
{ n = (jushu - p + 9) % 9; }
ret = QiMenData.qiyiyuanwei[n].ToString();
return ret;
}
/// <summary>
/// 獲取排盤
/// </summary>
/// <param name="time"></param>
/// <returns></returns>
public string PaiPan(DateTime time)
{
string ret = string.Empty;
StringBuilder sb = new StringBuilder();
QiMenPan pan = getQiMenPan(time);
int[] post =new int[]{4,9,2,3,5,7,8,1,6};
string shen,ren,tian, di,yingan;
for (int i = 0; i < 9; i++)
{
if (i.Equals(3)||i.Equals(6))
{
sb.Append("</tr><tr>");
}
if (i.Equals(4))
{
di=getPostDiPan(pan.jushu, pan.juyinyan, post[i]);
sb.Append(string.Format("<td class=\"tdline\"><table><tr><td></td></tr><tr><td></td></tr><tr><td>{0}</td></tr></table></td>", di));
}
else
{
shen=getPostShenPan(pan.juyinyan, pan.zhifugong, post[i]);
ren=getPostRenPan(pan.zhishi, pan.zhishigong, post[i]);
tian=getPostTianPan(pan.zhifu, pan.zhifugong, post[i]);
di=getPostDiPan(pan.jushu, pan.juyinyan, post[i]);
yingan = getTianPanYinGan(pan.jushu, pan.juyinyan, pan.zhifugong, pan.zhifu, tian[0].ToString());
sb.Append(string.Format("<td class=\"tdline\"><table><tr><td class=\"tdnoline\">{0}</td></tr><tr><td class=\"tdnoline\">{1} {4}</td></tr><tr><td>{2} {3}</td></tr></table></td>", shen, ren, tian, di, yingan));
}
}
StringBuilder sb1 = new StringBuilder();
string css = "<style type=\"text/css\">.tbline { border-width: 1px; border-spacing: 2px; border-style: outset; border-color: gray; border-collapse: separate; background-color: white;}.tdline { border-width: 1px; border-spacing: 2px; border-style: outset; border-color: gray; border-collapse: separate; background-color: white;}</style>";
sb1.Append("排盤:<a href=\"http://hybz.org\">洪銦八字</a> -http://hybz.org <br>");
sb1.Append(string.Format("時間:{0}<br>",pan.time.ToString("yyyy年MM月dd日HH時dd分")));
sb1.Append(string.Format("干支:{0}<br>",pan.bazi));
sb1.Append(string.Format("日空:{0},時空:{1}<br>",pan.rikong,pan.shikong));
sb1.Append(string.Format("交節:{0}<br>", pan.jiaojie));
sb1.Append(string.Format("{0}:{1},{2}時旬首爲{3}<br>",pan.jieqi,pan.yuanming,pan.shichen,pan.shichenxunshou));
sb1.Append(string.Format("{0}遁{1}局,值符{2}落{3}宮,值使{4}門落{5}宮<br>", pan.juyinyan, pan.jushu, pan.zhifu, pan.zhifugong, pan.zhishi, pan.zhishigong));
ret = string.Format("{2}{0}<table class=\"tbline\"><tr>{1}</tr></table>", sb1.ToString(), sb.ToString(),css);
return ret;
}
}
}
此代碼爲洪銦八字<http://hybz.org>提供,歡迎轉載,請註明出處,多做合做。
微信號:hybzorg 微信
參考資料:
一、奇門遁甲排盤心法祕訣,從此排盤只用心!(完整版)--新安釣叟
二、高俊波奇門排盤
三、張誌春老師也在《神奇之門》
app