700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > php 计算壬子 (14条消息)计算生辰八字五行属性的算法

php 计算壬子 (14条消息)计算生辰八字五行属性的算法

时间:2020-01-03 23:33:13

相关推荐

php 计算壬子 (14条消息)计算生辰八字五行属性的算法

计算生辰八字五行属性的算法

潘爱民

/1/26

缘起:几年前,小儿出生的几天之内,我需要为他起名字。人生难得接一两回这样的任务,更是格外珍惜。我调研了几种起名字的思路,最终确定按照五行阴阳平衡的道理来确定生辰八字的五行属性,然后选取恰当的字。

说明:本文描述的算法是根据Internet上的资料整理而得到,并非我原创,但个别地方我做过修改。其中经验值的出处已无法找到。

算法的高度足够,我是坐在飞机上写下这一算法描述的,上万米高空俯瞰大地,感觉到一种静默的平衡J。在过去几年中,我用这一算法测算过十多个生辰八字,也碰到过一两个极端的情形,与现实中的表现比较吻合。因此,我相信这算法的结果有参考意义。但是,因使用该算法引起的任何意外事故,我概不负责,请谨慎使用。

算法的过程如下所述:

1. 根据出生年月日和时辰,确定八个字,即生辰八字。

查万年历(比如),确定前六个字。比如1968年8月8日,查到的结果是:

戊申辛酉壬寅

这六个字分别是年份的天干、地支,月份的天干、地支,和日子的天干、地支。

接下来确定时辰的天干和地支,查下表:

出生

钟点

时辰地支

日干(即第5个字)

甲 己

乙 庚

丙 辛

丁 壬

戊 癸

23-1

1-3

3-5

5-7

7-9

9-11

11-13

13-15

15-17

17-19

19-21

21-23

甲子

乙丑

丙寅

丁卯

戊辰

己巳

庚午

辛未

壬申

癸酉

甲戌

乙亥

丙子

丁丑

戊寅

己卯

庚辰

辛巳

壬午

癸未

甲申

乙酉

丙戌

丁亥

戊子

己丑

庚寅

辛卯

壬辰

癸巳

甲午

乙未

丙申

丁酉

戊戌

己亥

庚子

辛丑

壬寅

癸卯

甲辰

己巳

丙午

丁未

戊申

己酉

庚戌

辛亥

壬子

癸丑

甲寅

乙卯

丙辰

丁巳

戊午

己未

庚申

辛酉

壬戌

癸亥

首先根据出生钟点找到相应的行数,再根据第5个字(日干),在右边5列中定位到相应的列,即可得到时辰的天干、地支,即第7、8两个字。譬如,1968年8月8日8点钟,在“7-9”这一行,“丁壬”这一列,得到时辰的干支为“甲辰”,所以,最终的八字为:

戊申辛酉壬寅甲辰

2. 计算八字的五行属性。

首先,每个天干和地支都有对应的五行属性,如下面两表所示:

天干属性:

天干

属性

天干

属性

天干

属性

地支属性:

地支

属性

地支

属性

地支

属性

接下来,计算五行“金木水火土”的强度值。对于五行中的每一行,其强度值包括两部分:

l 天干强度:即八字中的4个天干,若其五行属性恰好是这一行,那么就有相应的贡献值,可查表如下:

生月\天干

子月

1.2

1.2

1.0

1.0

1.0

1.0

1.0

1.0

1.2

1.2

丑月

1.06

1.06

1.0

1.0

1.1

1.1

1.14

1.14

1.1

1.1

寅月

1.14

1.14

1.2

1.2

1.06

1.06

1.0

1.0

1.0

1.0

卯月

1.2

1.2

1.2

1.2

1.0

1.0

1.0

1.0

1.0

1.0

辰月

1.1

1.1

1.06

1.06

1.1

1.1

1.1

1.1

1.04

1.04

巳月

1.0

1.0

1.14

1.14

1.14

1.14

1.06

1.06

1.06

1.06

午月

1.0

1.0

1.2

1.2

1.2

1.2

1.0

1.0

1.0

1.0

未月

1.04

1.04

1.1

1.1

1.16

1.16

1.1

1.1

1.0

1.0

申月

1.06

1.06

1.0

1.0

1.0

1.0

1.14

1.14

1.2

1.2

酉月

1.0

1.0

1.0

1.0

1.0

1.0

1.2

1.2

1.2

1.2

戌月

1.0

1.0

1.04

1.04

1.14

1.14

1.16

1.16

1.06

1.06

亥月

1.2

1.2

1.0

1.0

1.0

1.0

1.0

1.0

1.14

1.14

l 地支强度:即八字中的4个地支,它们可能会藏了这一五行对应的天干,比如,“丑”藏了“癸、辛、己”,而癸、辛、己的五行属性分别是水、金、土。所以,地支“丑”对水、金、土都有强度贡献,而强度值的大小则取决于相应的月份。下面的表格涵盖了地支所藏的五行强度值。

地支

支藏

月支(即第6个字)

1.2

1.1

1.0

1.0

1.04

1.06

1.0

1.0

1.2

1.2

1.06

1.14

0.36

0.33

0.3

0.3

0.312

0.318

0.3

0.3

0.36

0.36

0.318

0.342

0.2

0.228

0.2

0.2

0.23

0.212

0.2

0.22

0.228

0.248

0.232

0.2

0.5

0.55

0.53

0.5

0.55

0.57

0.6

0.58

0.5

0.5

0.57

0.5

0.3

0.3

0.36

0.36

0.318

0.342

0.36

0.33

0.3

0.3

0.342

0.318

0.84

0.742

0.798

0.84

0.77

0.7

0.7

0.728

0.742

0.7

0.7

0.84

1.2

1.06

1.14

1.2

1.1

1.0

1.0

1.04

1.06

1.0

1.0

1.2

0.36

0.318

0.342

0.36

0.33

0.3

0.3

0.312

0.318

0.3

0.3

0.36

0.24

0.22

0.2

0.2

0.208

0.2

0.2

0.2

0.24

0.24

0.212

0.228

0.5

0.55

0.53

0.5

0.55

0.6

0.6

0.58

0.5

0.5

0.57

0.5

0.3

0.342

0.3

0.3

0.33

0.3

0.3

0.33

0.342

0.36

0.348

0.3

0.7

0.7

0.84

0.84

0.742

0.84

0.84

0.798

0.7

0.7

0.728

0.742

1.0

1.0

1.2

1.2

1.06

1.14

1.2

1.1

1.0

1.0

1.04

1.06

0.3

0.3

0.36

0.36

0.318

0.342

0.36

0.33

0.3

0.3

0.312

0.318

0.24

0.212

0.228

0.24

0.22

0.2

0.2

0.208

0.212

0.2

0.2

0.24

0.5

0.55

0.53

0.5

0.55

0.57

0.6

0.58

0.5

0.5

0.57

0.5

0.36

0.33

0.3

0.3

0.312

0.318

0.3

0.3

0.36

0.36

0.318

0.342

0.7

0.798

0.7

0.7

0.77

0.742

0.7

0.77

0.798

0.84

0.812

0.7

1.0

1.14

1.0

1.0

1.1

1.06

1.0

1.1

1.14

1.2

1.16

1.0

0.3

0.342

0.3

0.3

0.33

0.318

0.3

0.33

0.342

0.36

0.348

0.3

0.2

0.2

0.24

0.24

0.212

0.228

0.24

0.22

0.2

0.2

0.208

0.212

0.5

0.55

0.53

0.5

0.55

0.57

0.6

0.58

0.5

0.5

0.57

0.5

0.36

0.318

0.342

0.36

0.33

0.3

0.3

0.312

0.318

0.3

0.3

0.36

0.84

0.77

0.7

0.7

0.728

0.742

0.7

0.7

0.84

0.84

0.724

0.798

回到前面的例子,八字“戊申辛酉壬寅甲辰”,查以上两表,可以得到五行强度为:

金:0.84 (年支藏庚) + 1.2 (月干) + 1.2 (月支藏辛) = 3.24

木:0.7 (日支藏甲) + 1.0 (时干) + 0.3 (时支藏乙) = 2.0

水:0.36 (年支藏壬) + 1.2 (日干) + 0.24 (时支藏癸) = 1.8

火:0.3 (日支藏丙) = 0.3

土:1.0 (年干) + 0.5 (时支藏戊) = 1.5

3. 给出起名指示。

首先确定八字的命里属性。只需查日干的五行属性,即代表了该八字的五行属性。譬如“戊申辛酉壬寅甲辰”的日干“壬”的属性为水,故该八字对应的命里属性为水。

再计算同类和异类的强度值。所谓同类是指,该八字的五行属性,以及生该五行属性的那个属性,譬如八字的五行属性为水,则水和金合起来称为同类,其他三个:木、火和土合起来称为异类。

五行的相生关系为:金生水,水生木,木生火,火生土,土生金。

得到了同类和异类的强度值以后,一个基本的判断是,若两者的数值比较接近,则说明该八字比较平衡,也暗示人生平顺;若两者数值相差较大(比如,大于1,甚至大于2),则说明五行不平衡,可以通过名字来弥补,或者将来找对象时候通过婚姻来补平。

因此,得到同类和异类数值以后,如何确定“用神”或“喜神”,或者,如何在名字中补平,需要一点点人脑智能,目前尚未量化到算法或程序中。回到前面的例子:

日干为壬,属水,故命属水

“同类”数值:5.04

“异类”数值:3.8

“同类”比“异类”数值大,日主强,以火为用神。宜补火。

最后,定下怎么补五行属性以后,剩下就是挑字了,这可以自由发挥了。康熙字典上每个字都有五行属性,可以在Internet上查到。

附上代码:

文件BaziEval.cpp

//BaziEval.cpp : Defines the entry point for the console application.

//

#include"stdafx.h"

#include

#include

usingnamespace std;

void Usage()

{

cout << "Usage:\tBaziEval.exe -q -t hh" << endl;

cout <" << endl;

return;

}

boolCheckBazi(_TCHAR *bazi);

_TCHAR *ComputeTimeGan(_TCHAR *bazi, int hour);

_TCHAR *EvalBazi(_TCHAR *bazi);

int_tmain(int argc, _TCHAR* argv[])

{

_TCHAR *subCmd, *paraStr;

if (argc != 5 && argc !=3) {

Usage();

return 0;

}

subCmd = argv[1];

paraStr = argv[2];

if (argc ==5) {

// Parsing the part of"-q "

if (!(wcslen(subCmd)==1&& subCmd[0] == 'q' || wcslen(subCmd)==2 && subCmd[0]=='-'&& subCmd[1]=='q')) {

Usage();

return 0;

}

if (wcslen(paraStr)!=6 ||!CheckBazi(paraStr)) {

cout <

Usage();

return 0;

}

// Parsing the part of"-t hh:mm"

subCmd = argv[3];

paraStr = argv[4];

if (!(wcslen(subCmd)==1&& subCmd[0] == 't' || wcslen(subCmd)==2 && subCmd[0]=='-'&& subCmd[1]=='t')) {

Usage();

return 0;

}

int hour = -1;

swscanf(paraStr,L"%d", &hour);

if (hour <0 || hour>23) {

cout <

Usage();

return 0;

}

_TCHAR * result =ComputeTimeGan(argv[2], hour);

if (result == 0) {

cout << "查询不成功!"<< endl;

} else {

char tmpBuf[128];

WideCharToMultiByte( CP_ACP, 0, result, -1,tmpBuf, 127, NULL, NULL );

cout << "查询八字的结果是:"<< tmpBuf << endl;

cout << "接下来您可以用-e命令测算此八字的五行平衡信息。" << endl;

}

return 0;

}

if (argc ==3) {

// Parsingthe part of "-q "

if (!(wcslen(subCmd)==1&& subCmd[0] == 'e' || wcslen(subCmd)==2 && subCmd[0]=='-'&& subCmd[1]=='e')) {

Usage();

return 0;

}

if (wcslen(paraStr)!=8 ||!CheckBazi(paraStr)) {

cout <

Usage();

return 0;

}

_TCHAR *result =EvalBazi(paraStr);

if (result == 0) {

cout << "测算不成功,另请高明!"<< endl;

} else {

char tmpBuf[1024];

WideCharToMultiByte( CP_ACP, 0, result, -1,tmpBuf, 1024, NULL, NULL );

cout <

}

return 0;

}

Usage();

return 0;

}

文件BaziAlgorithm.cpp

#include "stdafx.h"

#include

const _TCHAR *TianGan = L"甲乙丙丁戊己庚辛壬癸";

const _TCHAR *DiZhi = L"子丑寅卯辰巳午未申酉戌亥";

bool CheckBazi(_TCHAR *bazi)

{

intbaziLen;

inti,j;

baziLen= wcslen(bazi);

if(baziLen != 6 && baziLen != 8 ) return false;

for(i = 0; i < baziLen;) {

_TCHARch = bazi[i];

for(j = 0; j < 10; j++)

if(ch == TianGan[j]) break;

if(j >= 10) return false;

i++;

ch= bazi[i];

for(j = 0; j < 12; j++)

if(ch == DiZhi[j]) break;

if(j >= 12) return false;

i++;

}

returntrue;

}

/*

根据出生日子的天干,通过下表来查算时辰干支:

时辰干支查算表

时间时辰 五行纪日干支

甲己 乙庚 丙辛 丁壬 戊癸

23-01 子/水 甲子 丙子 戊子 庚子 壬子

01-03 丑/土 乙丑 丁丑 己丑 辛丑 癸丑

03-05 寅/木 丙寅 戊寅 庚寅 壬寅 甲寅

05-07 卯/木 丁卯 己卯 辛卯 癸卯 乙卯

07-09 辰/土 戊辰 庚辰 壬辰 甲辰 丙辰

09-11 巳/火 己巳 辛巳 癸巳 己巳 丁巳

11-13 午/火 庚午 壬午 甲午 丙午 戊午

13-15 未/土 辛未 癸未 乙未 丁未 己未

15-17 申/金 壬申 甲申 丙申 戊申 庚申

17-19 酉/金 癸酉 乙酉 丁酉 己酉 辛酉

19-21 戊/土 甲戌 丙戌 戊戌 庚戌 壬戌

21-23 亥/水 乙亥 丁亥 己亥 辛亥 癸亥

*/

const _TCHAR * cTimeGanZhi_Table[12][5] =

{

{L"甲子",L"丙子", L"戊子", L"庚子", L"壬子"},

{L"乙丑",L"丁丑", L"己丑", L"辛丑", L"癸丑"},

{L"丙寅",L"戊寅", L"庚寅", L"壬寅", L"甲寅"},

{L"丁卯",L"己卯", L"辛卯", L"癸卯", L"乙卯"},

{L"戊辰",L"庚辰", L"壬辰", L"甲辰", L"丙辰"},

{L"己巳",L"辛巳", L"癸巳", L"己巳", L"丁巳"},

{L"庚午", L"壬午",L"甲午", L"丙午", L"戊午"},

{L"辛未",L"癸未", L"乙未", L"丁未", L"己未"},

{L"壬申",L"甲申", L"丙申", L"戊申", L"庚申"},

{L"癸酉",L"乙酉", L"丁酉", L"己酉", L"辛酉"},

{L"甲戌",L"丙戌", L"戊戌", L"庚戌", L"壬戌"},

{L"乙亥",L"丁亥", L"己亥", L"辛亥", L"癸亥"}

};

static _TCHAR sBuf[128]; // 用作八字结果缓冲区

// 根据出生年月日的干支计算时辰干支

// 输入参数:bazi,年月日的干支,即八字中的前六个字

// 输入参数:hour,出生时间的小时数,-1~22

// 输出结果:八字字符串,Unicode编码

_TCHAR * ComputeTimeGan(_TCHAR *bazi, inthour)

{

_TCHARdayGan = bazi[4];

intindexX, indexY;

inti;

for(i = 0; i < 10; i++)

if(dayGan == TianGan[i]) break;

if(i >= 10) return 0;

indexX= i;

if(indexX >=5) indexX -= 5;

indexY= (hour +1)/2;

wcscpy(sBuf,bazi);

wcscat(sBuf,cTimeGanZhi_Table[indexY][indexX]);

returnsBuf;

}

/*

十二月份天干强度表

生月\四柱天干 甲 乙 丙 丁 戊 己 庚 辛 壬 癸

子月 1.2 1.2 1.0 1.0 1.0 1.0 1.0 1.0 1.2 1.2

丑月 1.06 1.06 1.0 1.0 1.1 1.1 1.14 1.14 1.1 1.1

寅月 1.14 1.14 1.2 1.2 1.06 1.06 1.0 1.0 1.0 1.0

卯月 1.2 1.2 1.2 1.2 1.0 1.0 1.0 1.0 1.0 1.0

辰月 1.1 1.1 1.06 1.06 1.1 1.1 1.1 1.1 1.04 1.04

巳月 1.0 1.0 1.14 1.14 1.14 1.14 1.06 1.06 1.06 1.06

午月 1.0 1.0 1.2 1.2 1.2 1.2 1.0 1.0 1.0 1.0

未月 1.04 1.04 1.1 1.1 1.16 1.16 1.1 1.1 1.0 1.0

申月 1.06 1.06 1.0 1.0 1.0 1.0 1.14 1.14 1.2 1.2

酉月 1.0 1.0 1.0 1.0 1.0 1.0 1.2 1.2 1.2 1.2

戌月 1.0 1.0 1.04 1.04 1.14 1.14 1.16 1.16 1.06 1.06

亥月 1.2 1.2 1.0 1.0 1.0 1.0 1.0 1.0 1.14 1.14

*/

double TianGan_Strength [12][10] =

{

{1.2, 1.2, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.2, 1.2},

{1.06, 1.06, 1.0, 1.0, 1.1, 1.1, 1.14, 1.14, 1.1, 1.1},

{1.14, 1.14, 1.2, 1.2, 1.06, 1.06, 1.0, 1.0, 1.0, 1.0},

{1.2, 1.2, 1.2, 1.2, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0},

{1.1, 1.1, 1.06, 1.06, 1.1, 1.1, 1.1, 1.1, 1.04, 1.04},

{1.0, 1.0, 1.14, 1.14, 1.14, 1.14, 1.06, 1.06, 1.06, 1.06},

{1.0, 1.0, 1.2, 1.2, 1.2, 1.2, 1.0, 1.0, 1.0, 1.0},

{1.04, 1.04, 1.1, 1.1, 1.16, 1.16, 1.1, 1.1, 1.0, 1.0},

{1.06, 1.06, 1.0, 1.0, 1.0, 1.0, 1.14, 1.14, 1.2, 1.2},

{1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.2, 1.2, 1.2, 1.2},

{1.0, 1.0, 1.04, 1.04, 1.14, 1.14, 1.16, 1.16, 1.06, 1.06},

{1.2, 1.2, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.14, 1.14}

};

/*

十二月份地支强度表

生月 子月 丑月 寅月 卯月 辰月 巳月 午月 未月 申月 酉月 戌月 亥月

地支 支藏

子 癸 1.2 1.1 1.0 1.0 1.04 1.06 1.0 1.0 1.2 1.2 1.06 1.14

丑 癸 0.36 0.33 0.3 0.3 0.312 0.318 0.3 0.3 0.36 0.36 0.318 0.342

丑 辛 0.2 0.228 0.2 0.2 0.23 0.212 0.2 0.22 0.228 0.248 0.232 0.2

丑 己 0.5 0.55 0.53 0.5 0.55 0.57 0.6 0.58 0.5 0.5 0.57 0.5

寅 丙 0.3 0.3 0.36 0.36 0.318 0.342 0.36 0.33 0.3 0.3 0.342 0.318

寅 甲 0.84 0.742 0.798 0.84 0.77 0.7 0.7 0.728 0.742 0.7 0.7 0.84

卯 乙 1.2 1.06 1.14 1.2 1.1 1.0 1.0 1.04 1.06 1.0 1.0 1.2

辰 乙 0.36 0.318 0.342 0.36 0.33 0.3 0.3 0.312 0.318 0.3 0.3 0.36

辰 癸 0.24 0.22 0.2 0.2 0.208 0.2 0.2 0.2 0.24 0.24 0.212 0.228

辰 戊 0.5 0.55 0.53 0.5 0.55 0.6 0.6 0.58 0.5 0.5 0.57 0.5

巳 庚 0.3 0.342 0.3 0.3 0.33 0.3 0.3 0.33 0.342 0.36 0.348 0.3

巳 丙 0.7 0.7 0.84 0.84 0.742 0.84 0.84 0.798 0.7 0.7 0.728 0.742

午 丁 1.0 1.0 1.2 1.2 1.06 1.14 1.2 1.1 1.0 1.0 1.04 1.06

未 丁 0.3 0.3 0.36 0.36 0.318 0.342 0.36 0.33 0.3 0.3 0.312 0.318

未 乙 0.24 0.212 0.228 0.24 0.22 0.2 0.2 0.208 0.212 0.2 0.2 0.24

未 己 0.5 0.55 0.53 0.5 0.55 0.57 0.6 0.58 0.5 0.5 0.57 0.5

申 壬 0.36 0.33 0.3 0.3 0.312 0.318 0.3 0.3 0.36 0.36 0.318 0.342

申 庚 0.7 0.798 0.7 0.7 0.77 0.742 0.7 0.77 0.798 0.84 0.812 0.7

酉 辛 1.0 1.14 1.0 1.0 1.1 1.06 1.0 1.1 1.14 1.2 1.16 1.0

戌 辛 0.3 0.342 0.3 0.3 0.33 0.318 0.3 0.33 0.342 0.36 0.348 0.3

戌 丁 0.2 0.2 0.24 0.24 0.212 0.228 0.24 0.22 0.2 0.2 0.208 0.212

戌 戊 0.5 0.55 0.53 0.5 0.55 0.57 0.6 0.58 0.5 0.5 0.57 0.5

亥 甲 0.36 0.318 0.342 0.36 0.33 0.3 0.3 0.312 0.318 0.3 0.3 0.36

亥 壬 0.84 0.77 0.7 0.7 0.728 0.742 0.7 0.7 0.84 0.84 0.724 0.798

*/

struct ZISTRENGTH {

_TCHARdiZhi;

_TCHARzhiCang;

doublestrength[12];

};

ZISTRENGTHDiZhi_Strength [] =

{

{L'子', L'癸', {1.2,1.1, 1.0, 1.0, 1.04, 1.06, 1.0,1.0, 1.2, 1.2, 1.06, 1.14}},

{L'丑', L'癸', {0.36,0.33, 0.3, 0.3, 0.312, 0.318, 0.3, 0.3, 0.36, 0.36, 0.318, 0.342}},

{L'丑', L'辛', {0.2,0.228, 0.2, 0.2, 0.23, 0.212, 0.2, 0.22,0.228, 0.248, 0.232, 0.2}},

{L'丑', L'己', {0.5,0.55, 0.53, 0.5, 0.55, 0.57, 0.6, 0.58, 0.5, 0.5, 0.57, 0.5}},

{L'寅', L'丙', {0.3,0.3, 0.36, 0.36, 0.318, 0.342, 0.36, 0.33, 0.3, 0.3, 0.342, 0.318}},

{L'寅', L'甲', {0.84,0.742, 0.798, 0.84, 0.77, 0.7, 0.7, 0.728, 0.742, 0.7, 0.7, 0.84}},

{L'卯', L'乙', {1.2,1.06, 1.14, 1.2, 1.1, 1.0, 1.0, 1.04, 1.06, 1.0, 1.0, 1.2}},

{L'辰', L'乙', {0.36,0.318, 0.342, 0.36, 0.33, 0.3, 0.3, 0.312, 0.318, 0.3, 0.3, 0.36}},

{L'辰', L'癸', {0.24,0.22, 0.2, 0.2, 0.208, 0.2, 0.2, 0.2,0.24, 0.24, 0.212, 0.228}},

{L'辰', L'戊', {0.5,0.55, 0.53, 0.5, 0.55, 0.6, 0.6, 0.58, 0.5, 0.5, 0.57, 0.5}},

{L'巳', L'庚', {0.3,0.342, 0.3, 0.3, 0.33, 0.3, 0.3, 0.33, 0.342, 0.36, 0.348, 0.3}},

{L'巳', L'丙', {0.7,0.7, 0.84, 0.84, 0.742, 0.84, 0.84, 0.798, 0.7, 0.7, 0.728, 0.742}},

{L'午', L'丁', {1.0,1.0, 1.2, 1.2, 1.06, 1.14, 1.2, 1.1, 1.0, 1.0, 1.04, 1.06}},

{L'未', L'丁', {0.3,0.3, 0.36, 0.36, 0.318, 0.342, 0.36, 0.33, 0.3, 0.3, 0.312, 0.318}},

{L'未', L'乙', {0.24,0.212, 0.228, 0.24, 0.22, 0.2, 0.2, 0.208, 0.212, 0.2, 0.2, 0.24}},

{L'未', L'己', {0.5,0.55, 0.53, 0.5, 0.55, 0.57, 0.6, 0.58, 0.5, 0.5, 0.57, 0.5}},

{L'申', L'壬', {0.36,0.33, 0.3, 0.3, 0.312, 0.318, 0.3, 0.3, 0.36, 0.36, 0.318, 0.342}},

{L'申', L'庚', {0.7,0.798, 0.7, 0.7, 0.77, 0.742, 0.7, 0.77, 0.798, 0.84, 0.812, 0.7}},

{L'酉', L'辛', {1.0,1.14, 1.0, 1.0, 1.1, 1.06, 1.0, 1.1, 1.14, 1.2, 1.16, 1.0}},

{L'戌', L'辛', {0.3,0.342, 0.3, 0.3, 0.33, 0.318, 0.3, 0.33, 0.342, 0.36, 0.348, 0.3}},

{L'戌', L'丁', {0.2,0.2, 0.24, 0.24, 0.212, 0.228, 0.24, 0.22, 0.2, 0.2, 0.208, 0.212}},

{L'戌', L'戊', {0.5,0.55, 0.53, 0.5, 0.55, 0.57, 0.6, 0.58, 0.5, 0.5, 0.57, 0.5}},

{L'亥', L'甲', {0.36,0.318, 0.342, 0.36, 0.33, 0.3, 0.3, 0.312, 0.318, 0.3, 0.3, 0.36}},

{L'亥', L'壬', {0.84,0.77, 0.7, 0.7, 0.728, 0.742, 0.7, 0.7, 0.84, 0.84, 0.724, 0.798}}

};

/*

金 --- 0

木 --- 1

水 --- 2

火 --- 3

土 --- 4

*/

_TCHAR WuXingTable[5] = {L'金', L'木', L'水', L'火', L'土' };

/*

天干地支的五行属性表

天干: 甲-木、乙-木、丙-火、丁-火、戊-土、己-土、庚-金、辛-金、壬-水、癸-水

地支:子-水、丑-土、寅-木、卯-木、辰-土、巳-火、午-火、未-土、申-金、酉-金、戌-土、亥-水

*/

int TianGan_WuXingProp[10] = {1, 1, 3, 3, 4,4, 0, 0, 2, 2};

int DiZhi_WuXingProp[12] = {2, 4, 1, 1, 4,3, 3, 4, 0, 0, 4, 2};

int GenerationSourceTable[5] = {4, 2, 0, 1,3};

int ComputeGanIndex(_TCHAR gan)

{

inti;

for(i=0; i < 10; i++)

if(TianGan[i] == gan) break;

if(i >= 10) return -1;

returni;

}

int ComputeZhiIndex(_TCHAR zhi)

{

inti;

for(i=0; i < 12; i++)

if(DiZhi[i] == zhi) break;

if(i >= 12) return -1;

returni;

}

static _TCHAR sResultBuf[1024]; // 用作八字测算结果返回的字符缓冲区

// 根据八字计算五行平衡

// 输入参数:bazi,年月日时的干支,即俗称的八字

// 输出结果:分析结果字符串,Unicode编码

_TCHAR * EvalBazi(_TCHAR *bazi)

{

doublestrengthResult[5];

intmonthIndex = ComputeZhiIndex(bazi[3]);

if(monthIndex == -1) goto ERROR_CASE;

wcscpy(sResultBuf,bazi);

wcscat(sResultBuf,L"\n\n");

for(int wuXing = 0; wuXing < 5; wuXing++) {

doublevalue1 = 0.0, value2 = 0.0;

inti;

//扫描4个天干

for(i = 0; i <8; i+=2) {

TCHARgan = bazi[i];

intindex = ComputeGanIndex(gan);

if(index == -1) goto ERROR_CASE;

if(TianGan_WuXingProp[index] == wuXing)

value1+= TianGan_Strength[monthIndex][index];

}

//扫描支藏

for(i = 1; i <8; i+=2) {

TCHARzhi = bazi[i];

for(intj = 0; j < sizeof (DiZhi_Strength)/sizeof (DiZhi_Strength[0]); j++) {

if(DiZhi_Strength[j].diZhi == zhi) {

intzhiCangIndex = ComputeGanIndex(DiZhi_Strength[j].zhiCang);

if(zhiCangIndex == -1) goto ERROR_CASE;

if(TianGan_WuXingProp[zhiCangIndex] == wuXing) {

value2+= DiZhi_Strength[j].strength[monthIndex];

break;

}

}

}

}

strengthResult[wuXing]= value1 + value2;

//输出一行计算结果

{

_TCHARpreStr[128];

chartmpBuf[128];

_TCHARtmpWBuf[256];

sprintf(tmpBuf,":%.3f + %.3f = %.3f\n", (float)value1, (float)value2,(float)(value1+value2));

MultiByteToWideChar(CP_ACP, 0, tmpBuf, strlen(tmpBuf)+1,

tmpWBuf,sizeof(tmpWBuf)/sizeof(_TCHAR) );

wcscpy(preStr,L"金:\t");

preStr[0]= WuXingTable[wuXing];

wcscat(sResultBuf,preStr);

wcscat(sResultBuf,tmpWBuf);

}

}

//根据日干求命里属性

intfateProp, srcProp;

{

_TCHARtmpWBuf[256];

fateProp= TianGan_WuXingProp[ComputeGanIndex(bazi[4])];

if(fateProp == -1) goto ERROR_CASE;

wcscpy(tmpWBuf,L"\n命属金\n\n");

tmpWBuf[3]= WuXingTable[fateProp];

wcscat(sResultBuf,tmpWBuf);

}

//求同类和异类的强度值

srcProp= GenerationSourceTable[fateProp];

{

_TCHARpreStr[128];

chartmpBuf[128];

_TCHARtmpWBuf[256];

doubletongLei = strengthResult[fateProp] + strengthResult[srcProp];

doubleyiLei = 0.0;

for(inti = 0; i < 5; i ++) yiLei += strengthResult[i];

yiLei-= tongLei;

sprintf(tmpBuf,"%.3f+ %.3f = %.3f\n", (float)strengthResult[fateProp],(float)strengthResult[srcProp],

(float)tongLei);

MultiByteToWideChar(CP_ACP, 0, tmpBuf, strlen(tmpBuf)+1,

tmpWBuf,sizeof(tmpWBuf)/sizeof(_TCHAR) );

wcscpy(preStr,L"同类:金+金,");

preStr[3]= WuXingTable[fateProp];

preStr[5]= WuXingTable[srcProp];

wcscat(sResultBuf,preStr);

wcscat(sResultBuf,tmpWBuf);

sprintf(tmpBuf,"%.3f\n", (float)yiLei);

MultiByteToWideChar(CP_ACP, 0, tmpBuf, strlen(tmpBuf)+1,

tmpWBuf,sizeof(tmpWBuf)/sizeof(_TCHAR) );

wcscat(sResultBuf,L"异类:总和为 ");

wcscat(sResultBuf,tmpWBuf);

}

returnsResultBuf;

ERROR_CASE:

return0;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。