合婚算法之用JAVA实现呂才合婚法

  问题:我输入 男方的生日:1980-01-01  01:01:01 女方生日:1980-01-01  01:01:01

   跪求这样一个八字合婚算法

   合婚软件似乎很多,关键是怎么去写或者说算法,网络上几乎没有类似文章

  作为易学高手的我(大师♂罗莊)对告诉各位码农如何制作合婚软件  负有不可推卸的责任。


  算法介绍:

  现在很多乡村算命先生都用 呂才合婚法和本命卦合婚法。

  这个东西其实我已经说过:http://blog.sina.com.cn/s/blog_6248932801019bu3.html

  这里用点代码实现下而已



60甲子:

甲子乙丑海中金,丙寅丁卯炉中火.
戊辰己巳大林木,庚午辛未路旁土.
壬申癸酉剑锋金,甲戌乙亥山头火.
丙子丁丑涧下水,戊寅己卯城头土.
庚辰辛巳白腊金,壬午癸未杨柳木.
甲申乙酉泉中水,丙戌丁亥屋上土.
戊子己丑霹雳火,庚寅辛卯松柏木.
壬辰癸巳长流水,甲午乙未砂中金.
丙申丁酉山下火,戊戌己亥平地木.
庚子辛丑璧上土,壬寅癸卯金簿金.
甲辰乙巳覆灯火,丙午丁未天河水.
戊申己酉大驿土,庚戌辛亥钗钏金.
壬子癸丑桑柘木,甲寅乙卯大溪水.
丙辰丁巳沙中土,戊午己未天上火.
庚申辛酉石榴木,壬戌癸亥大海水.


干支对宫挂:

干支

纳音

 

干支

纳音

 

干支

纳音

丙戌

屋上土

1

3

3

丙寅

炉中火

21

5

1

丙午

天河水

41

7

8

乙酉

泉中水

2

4

2

乙丑

海中金

22

6

9

乙巳

佛灯火

42

8

7

甲申

泉中水

3

5

1

甲子

海中金

23

7

8

甲辰

佛灯火

43

9

6

癸未

杨柳木

4

6

9

癸亥

大海水

24

8

7

癸卯

金箔金

44

1

5

壬午

杨柳木

5

7

8

壬戌

大海水

25

9

6

壬寅

金箔金

45

2

4

辛巳

白蜡金

6

8

7

辛酉

石榴木

26

1

5

辛丑

壁上土

46

3

3

庚辰

白蜡金

7

9

6

庚申

石榴木

27

2

4

庚子

壁上土

47

4

2

己卯

城墙土

8

1

5

己未

天上火

28

3

3

己亥

平地木

48

5

1

戊寅

城墙土

9

2

4

戊午

天上火

29

4

2

戊戌

平地木

49

6

9

丁丑

涧下水

10

3

3

丁巳

沙中土

30

5

1

丁酉

山下火

50

7

8

丙子

涧下水

11

4

2

丙辰

沙中土

31

6

9

丙申

山下火

51

8

7

乙亥

山头火

12

5

1

乙卯

大溪水

32

7

8

乙未

沙中金

52

9

6

甲戌

山头火

13

6

9

甲寅

大溪水

33

8

7

甲午

沙中金

53

1

5

癸酉

剑锋金

14

7

8

癸丑

桑松木

34

9

6

癸巳

长流水

54

2

4

壬申

剑锋金

15

8

7

壬子

桑松木

35

1

5

壬辰

长流水

55

3

3

辛未

路旁土

16

9

6

辛亥

钗钏金

36

2

4

辛卯

松柏木

56

4

2

庚午

路旁土

17

1

5

庚戌

钗钏金

37

3

3

庚寅

松柏木

57

5

1

己巳

大林木

18

2

4

己酉

大驿土

38

4

2

己丑

霹雳火

58

6

9

戊辰

大林木

19

3

3

戊申

大驿土

39

5

1

戊子

霹雳火

59

7

8

丁卯

炉中火

20

4

2

丁未

天河水

40

6

9

丁亥

屋上土

60

8

7


结果表:

(对方)
(自己)   ①   ② ③   ④   ⑥   ⑦   ⑧   ⑨
      ① 伏位 绝命 天医 生气 六煞 祸害 五鬼 延年
      ② 绝命 伏位 祸害 五鬼 延年 天医 生气 六煞
      ③ 天医 祸害 伏位 延年 五鬼 绝命 六煞 生气
      ④ 生气 五鬼 延年 伏位 祸害 六煞 绝命 天医
      ⑥ 六煞 延年 五鬼 祸害 伏位 生气 天医 绝命
      ⑦ 祸害 天医 绝命 六煞 生气 伏位 延年 五鬼
      ⑧ 五鬼 生气 六煞 绝命 天医 延年 伏位 祸害
      ⑨ 延年 六煞 生气 天医 绝命 五鬼 祸害 伏位


  思路:其实就是查几个表而已,60甲子一个表查年柱,根据结果查上面干支对宫挂表,最后根据结果查结果表。


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package luozhuanghehun;

/**
 * 吕才合婚算法
 *
 * @author luozhuang 大师♂罗莊
 */
public class luozhuanglvhehun {

    enum sex {

        man,
        woman;
    }
    public final String[] jiazhi = {
        "甲子", "乙丑", "丙寅", "丁卯", "戊辰", "己巳", "庚午", "辛未", "壬申", "癸酉",
        "甲戌", "乙亥", "丙子", "丁丑", "戊寅", "己卯", "庚辰", "辛巳", "壬午", "癸未",
        "甲申", "乙酉", "丙戌", "丁亥", "戊子", "己丑", "庚寅", "辛卯", "壬辰", "癸巳",
        "甲午", "乙未", "丙申", "丁酉", "戊戌", "己亥", "庚子", "辛丑", "壬寅", "癸卯",
        "甲辰", "乙巳", "丙午", "丁未", "戊申", "己酉", "庚戌", "辛亥", "壬子", "癸丑",
        "甲寅", "乙卯", "丙辰", "丁巳", "戊午", "己未", "庚申", "辛酉", "壬戌", "癸亥"
    };
    //注意数组没有第5行和第5列
    public final String[][] resultarray = {
        {"伏位", "绝命", "天医", "生气", "六煞", "祸害", "五鬼", "延年"},
        {"绝命", "伏位", "祸害", "五鬼", "延年", "天医", "生气", "六煞"},
        {"天医", "祸害", "伏位", "延年", "五鬼", "绝命", "六煞", "生气"},
        {"生气", "五鬼", "延年", "伏位", "祸害", "六煞", "绝命", "天医"},
        {"六煞", "延年", "五鬼", "祸害", "伏位", "生气", "天医", "绝命"},
        {"祸害", "天医", "绝命", "六煞", "生气", "伏位", "延年", "五鬼"},
        {"五鬼", "生气", "六煞", "绝命", "天医", "延年", "伏位", "祸害"},
        {"延年", "六煞", "生气", "天医", "绝命", "五鬼", "祸害", "伏位"},};
    public final String[][] numsix = {
        //干支,纳音,岁数,男,女
        {"丙戌", "屋上土", "1", "3", "3"},
        {"乙酉", "泉中水", "2", "4", "2"},
        {"甲申", "泉中水", "3", "5", "1"},
        {"癸未", "杨柳木", "4", "6", "9"},
        {"壬午", "杨柳木", "5", "7", "8"},
        {"辛巳", "白蜡金", "6", "8", "7"},
        {"庚辰", "白蜡金", "7", "9", "6"},
        {"己卯", "城墙土", "8", "1", "5"},
        {"戊寅", "城墙土", "9", "2", "4"},
        {"丁丑", "涧下水", "10", "3", "3"},
        {"丙子", "涧下水", "11", "4", "2"},
        {"乙亥", "山头火", "12", "5", "1"},
        {"甲戌", "山头火", "13", "6", "9"},
        {"癸酉", "剑锋金", "14", "7", "8"},
        {"壬申", "剑锋金", "15", "8", "7"},
        {"辛未", "路旁土", "16", "9", "6"},
        {"庚午", "路旁土", "17", "1", "5"},
        {"己巳", "大林木", "18", "2", "4"},
        {"戊辰", "大林木", "19", "3", "3"},
        {"丁卯", "炉中火", "20", "4", "2"},
        {"丙寅", "炉中火", "21", "5", "1"},
        {"乙丑", "海中金", "22", "6", "9"},
        {"甲子", "海中金", "23", "7", "8"},
        {"癸亥", "大海水", "24", "8", "7"},
        {"壬戌", "大海水", "25", "9", "6"},
        {"辛酉", "石榴木", "26", "1", "5"},
        {"庚申", "石榴木", "27", "2", "4"},
        {"己未", "天上火", "28", "3", "3"},
        {"戊午", "天上火", "29", "4", "2"},
        {"丁巳", "沙中土", "30", "5", "1"},
        {"丙辰", "沙中土", "31", "6", "9"},
        {"乙卯", "大溪水", "32", "7", "8"},
        {"甲寅", "大溪水", "33", "8", "7"},
        {"癸丑", "桑松木", "34", "9", "6"},
        {"壬子", "桑松木", "35", "1", "5"},
        {"辛亥", "钗钏金", "36", "2", "4"},
        {"庚戌", "钗钏金", "37", "3", "3"},
        {"己酉", "大驿土", "38", "4", "2"},
        {"戊申", "大驿土", "39", "5", "1"},
        {"丁未", "天河水", "40", "6", "9"},
        {"丙午", "天河水", "41", "7", "8"},
        {"乙巳", "佛灯火", "42", "8", "7"},
        {"甲辰", "佛灯火", "43", "9", "6"},
        {"癸卯", "金箔金", "44", "1", "5"},
        {"壬寅", "金箔金", "45", "2", "4"},
        {"辛丑", "壁上土", "46", "3", "3"},
        {"庚子", "壁上土", "47", "4", "2"},
        {"己亥", "平地木", "48", "5", "1"},
        {"戊戌", "平地木", "49", "6", "9"},
        {"丁酉", "山下火", "50", "7", "8"},
        {"丙申", "山下火", "51", "8", "7"},
        {"乙未", "沙中金", "52", "9", "6"},
        {"甲午", "沙中金", "53", "1", "5"},
        {"癸巳", "长流水", "54", "2", "4"},
        {"壬辰", "长流水", "55", "3", "3"},
        {"辛卯", "松柏木", "56", "4", "2"},
        {"庚寅", "松柏木", "57", "5", "1"},
        {"己丑", "霹雳火", "58", "6", "9"},
        {"戊子", "霹雳火", "59", "7", "8"},
        {"丁亥", "屋上土", "60", "8", "7"},};

    /**
     *
     * @param man 男方年份字符串
     * @param woman 女方年份字符串
     * @return
     */
    public String hehun(String man, String woman) {
        if (man.length() != 4 || woman.length() != 4) {
            return "输入不正确";
        }

        return peihun(man, woman);

    }

    public String peihun(String manyear, String womanyear) {
        return peihun(getnumber(manyear), getnumber(womanyear));
    }

    private String peihun(int manyear, int womanyear) {
        String mang = getnumsix(yearnumber(manyear), sex.man);
        String womang = getnumsix(yearnumber(womanyear), sex.woman);
        int man = getnumber(mang);
        int woman = getnumber(womang);
        
        
        //数组从0开始,而我们计算从1开始
        man--;
        woman--;
        //注意数组没有第5行和第5列
        if (man >= 5) {
            man--;
        }
        if (woman >= 5) {
            woman--;
        }

        //根据表格取结果
        return resultarray[man][woman];//顺序一样的


    }

    /**
     *
     * @param year 年份
     * @param isman 男的么
     * @return 返回宫挂数
     */
    public String getnumsix(String year, sex isman) {

        for (int i = 0; i < 60; i++) {
            if (year.equalsIgnoreCase(numsix[i][0])) {

                if (isman == sex.man) {
                    return numsix[i][3];
                } else {
                    return numsix[i][4];
                }
            }
        }
        return null;

    }

    /**
     * 字符串-》数字
     *
     * @param year 字符串
     * @return 字符串对应数字
     * @throws NumberFormatException
     */
    public int getnumber(String year) throws NumberFormatException {

        int yearnumber = Short.parseShort(year);
        return yearnumber;

    }

    /**
     * 年份取出年柱
     *
     * @param year 年数
     * @return 求的年份的干支
     */
    public String yearnumber(int year) {

        //1864年是甲子年,每隔六十年一个甲子
        int idx = (Math.abs(year - 1864)) % 60;
        //没有过春节的话那么年还算上一年的,此处求的年份的干支
        String result = jiazhi[idx];
        return result;

    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        luozhuanglvhehun my = new luozhuanglvhehun();
        String result = my.hehun("1947", "1853");

        System.out.println(result);
        
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值