奇门算法

大六壬与奇门遁甲排盘引擎的算法设计与工程实践 历法计算是传统术数排盘系统的根基,无论是大六壬还是奇门遁甲,都离不开干支、节气、真太阳时等底层数据的精确处理。理解干支历法的推算原理,以及真太阳时校正对时辰判定的影响,是构建可靠排盘工具的前提。本文从通用历法基础切入,分析大六壬的天地盘、四课、三传推导链路,以及奇门遁甲的阴阳遁局数、九宫叠加与值符值使动态排布逻辑,并结合 qimen_star-master 项目的工程实践,探讨排盘引擎的模块化设计、边界场景处理和应用落地方式。内容兼顾技术原理与实战经验,适合想深入掌握排盘算法或开发相关工具的开发者参考。 阅读详情

1 签名算法

      签名策略: 假设 ERP向WMS发起正向接口调用,那么ERP对URL+body信息进行MD5加密(加密算法下面有详细介绍),奇门收到ERP的请求后,会用ERP的 appkey的secret进行sign校验,验证是否报文有被篡改。如果验证通过,奇门转发给WMS之前再做一次签名,用WMS的appkey的 secret进行MD5加密,作为sign参数的值,其他信息不变。这样WMS在收到奇门传过来的报文后,可以用自己WMS的secret进行签名验证, 此次调用的签名验证完成。
 
我们用 ERP 调用奇门 URL 演示加密算法:
http://qimenapi.tbsandbox.com/router/qimen/service?method=taobao.qimen.entryorde.rquery&timestamp=2015-04-26 00:00:07&format=xml&app_key=testerp_appkey&v=2.0&sign=abc&sign_method=md5&customerId=stub-cust-code
 
 
    1)、输入参数为
method= taobao.qimen.entryorder.query
       timestamp=2015-04-26 00:00:07
       format=xml
       app_key= testerp_appkey
       v=2.0
       sign_method=md5
       customerId =test
 
    2)、按首字母升序排列
app_key= testerp_appkey
customerId = stub-cust-code
format=xml
method= taobao.qimen.entryorder.query
sign_method=md5
       timestamp=2015-04-26 00:00:07
       v=2.0             
 
    3)、连接字符串
连接参数名与参数值 , 并在首尾加上 secret ,此处假设 secret=test ,如下:
       testapp_keytesterp_appkeycustomerIdstub-cust-codeformatxmlmethodtaobao.qimen.entryorder.querysign_methodmd5timestamp2015-04-26 00:00:07v2.0 body test
其中: body 用请求中的 body 内容代替
 
    4)、生成签名 sign
32 位大写 MD5 值 ->   D06D88CB34B2EC0E5C9BAB396C9542B6
 
    5)、拼装URL请求
将所有参数值转换为 UTF-8 编码,然后拼装,通过浏览器访问该地址,即成功调用一次接口,如下 :
http://qimenapi.tbsandbox.com/router/qimen/service?method= taobao.qimen.entryorder.query &timestamp=2015-04-26 00:00:07&format=xml&app_key=testerp_appkey&v=2.0&sign= D06D88CB34B2EC0E5C9BAB396C9542B6 &sign_method=md5&customerId=stub-cust-code
 
 

2 算法JAVA示例

 
package md5;
 
 
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
 
/**
 * Created by jiqian.zzp on 2015/7/6.
 */
public class QimenSign {
    public static void main(String[] args) {
                        + "method=your_method&"
                        + "timestamp=2015-04-26%2000:00:07&"
                        + "format=xml&"
                        + "app_key=your_appkey&"
                        + "v=your_version&"
                        + "sign=your_sign&"
                        + "sign_method=md5&"
                        + "customerId=your_customerId";
        String body = "your_body";
        String secretKey = "your_secretKey";
 
        QimenSign sign = new QimenSign();
        String md5 = sign.sign(url, body, secretKey);
        System.out.println(md5);//6A4B6FCFAFE80280565406E110C27DC8
    }
 
    public String sign(String url, String body, String secretKey) {
 
        Map<String, String> params = getParamsFromUrl(url);
 
        // 1.  第一步,确保参数已经排序
        String[] keys = params.keySet().toArray(new String[0]);
        Arrays.sort(keys);
 
        // 2.  第二步,把所有参数名和参数值拼接在一起 ( 包含 body 体 )
        String joinedParams = joinRequestParams(params, body, secretKey, keys);
 
        //your_secretKeyapp_keyyour_appkeycustomerIdyour_customerIdformatxmlmethodyour_methodsign_methodmd5timestamp2015-04-26 00:00:07vyour_versionyour_bodyyour_secretKey
        System.out.println(joinedParams);
 
        // 3.  第三步,使用加密算法进行加密(目前仅支持 md5 算法)
        String signMethod = params.get("sign_method");
        if (!"md5".equalsIgnoreCase(signMethod)) {
            //TODO
            return null;
        }
        byte[] abstractMesaage = digest(joinedParams);
 
        // 4.  把二进制转换成大写的十六进制
        String sign = byte2Hex(abstractMesaage);
 
        return sign;
 
    }
 
    private Map<String, String> getParamsFromUrl(String url) {
        Map<String, String> requestParams = new HashMap<String, String>();
        try {
            String fullUrl = URLDecoder.decode(url, "UTF-8");
            String[] urls = fullUrl.split("\\?");
            if (urls.length == 2) {
                String[] paramArray = urls[1].split("&");
                for (String param : paramArray) {
                    String[] params = param.split("=");
                    if (params.length == 2) {
                        requestParams.put(params[0], params[1]);
                    }
                }
            }
        } catch (UnsupportedEncodingException e) {
            // TODO
        }
        return requestParams;
    }
 
    private String byte2Hex(byte[] bytes) {
        char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        int j = bytes.length;
        char str[] = new char[j * 2];
        int k = 0;
        for (byte byte0 : bytes) {
            str[k++] = hexDigits[byte0 >>> 4 & 0xf];
            str[k++] = hexDigits[byte0 & 0xf];
        }
        return new String(str);
    }
 
    private byte[] digest(String message)  {
        try {
            MessageDigest md5Instance = MessageDigest.getInstance("MD5");
            md5Instance.update(message.getBytes("UTF-8"));
            return md5Instance.digest();
        } catch (UnsupportedEncodingException e) {
            //TODO
            return null;
        } catch (NoSuchAlgorithmException e) {
            //TODO
            return null;
        }
    }
 
    private String joinRequestParams(Map<String, String> params, String body, String secretKey, String[] sortedKes) {
        StringBuilder sb = new StringBuilder(secretKey); //  前面加上 secretKey
 
        for (String key : sortedKes) {
            if ("sign".equals(key)) {
                continue; //  签名时不计算 sign 本身
            } else {
                String value = params.get(key);
                if (isNotEmpty(key) && isNotEmpty(value)) {
                    sb.append(key).append(value);
                }
            }
        }
        sb.append(body); //  拼接 body 体
        sb.append(secretKey); //  最后加上 secretKey
        return sb.toString();
    }
 
    private boolean isNotEmpty(String s) {
        return null != s && !"".equals(s);
    }
}
 
 

3.算法.net示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Diagnostics;
using System.Text;
/// <summary>
/// QimenSign 的摘要说明
/// </summary>
public class QimenSign
{
        public QimenSign()
        {
        
        }

    public String sign(String url, String body, String secretKey)
    {
        Dictionary<String, String> param = getParamsFromUrl(url);

        // 1. 第一步,确保参数已经排序
        string[] keys = new string[param.Keys.Count];
        param.Keys.CopyTo(keys,0);
        Array.Sort(keys);

        // 2. 第二步,把所有参数名和参数值拼接在一起(包含body体)
        String joinedParams = joinRequestParams(param, body, secretKey, keys);

        // 3. 第三步,使用加密算法进行加密(目前仅支持md5算法)
        String signMethod = param["sign_method"];
        if (!string.Equals("md5",signMethod)) {
            //TODO
            return null;
        }
        byte[] abstractMesaage = digest(joinedParams);

        // 4. 把二进制转换成大写的十六进制
        String sign = byte2Hex(abstractMesaage);

        return sign;
    }

    private Dictionary<string, string> getParamsFromUrl(String url) {
        Dictionary<string, string> requestParams = new Dictionary<string, string>();
        try {
            String fullUrl = System.Web.HttpUtility.UrlDecode(url, System.Text.Encoding.UTF8);
            String[] urls = fullUrl.Split('?');
            if (urls.Length == 2) {
                String[] paramArray = urls[1].Split('&');
                foreach (String param in paramArray) {
                    String[] values = param.Split('=');
                    if (values.Length == 2) {
                        requestParams.Add(values[0], values[1]);
                    }
                }
            }
        } catch (Exception e) {
            // TODO
            return null;
        }
        return requestParams;
    }
    private String byte2Hex(byte[] bytes) {
        char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        int j = bytes.Length;
        char[] str = new char[j * 2];
        int k = 0;
        foreach (byte byte0 in bytes) {
            str[k++] = hexDigits[byte0 >> 4 & 0xf];
            str[k++] = hexDigits[byte0 & 0xf];
        }
        return new String(str);
    }

    private byte[] digest(String message)
    {
        try
        {
            //获取加密服务  
            System.Security.Cryptography.MD5CryptoServiceProvider md5CSP = new System.Security.Cryptography.MD5CryptoServiceProvider();  
         
            //获取要加密的字段,并转化为Byte[]数组  
            byte[] testEncrypt = System.Text.Encoding.UTF8.GetBytes(message);  
  
            //加密Byte[]数组  
            byte[] resultEncrypt = md5CSP.ComputeHash(testEncrypt);
            return resultEncrypt;
        }
        catch (Exception e)
        {
            //TODO
            return null;
        }
    }

    private String joinRequestParams(Dictionary<String, String> param, String body, String secretKey, String[] sortedKes) {
        StringBuilder sb = new StringBuilder(secretKey); // 前面加上secretKey

        foreach (String key in sortedKes) {
            if ("sign".Equals(key)) {
                continue; // 签名时不计算sign本身
            } else {
                String value = param[key];
                if (isNotEmpty(key) && isNotEmpty(value)) {
                    sb.Append(key).Append(value);
                }
            }
        }
        sb.Append(body); // 拼接body体
        sb.Append(secretKey); // 最后加上secretKey
        return sb.ToString();
    }

    private bool isNotEmpty(String s) {
        return null != s && !"".Equals(s);
    }

}
 

4.签名算法Python版本

以下算法基于python2.x


#! /usr/bin/python
# -*- coding: utf-8 -*-
import md5

    def getTotalUrl_with_body(method_args,xml_body):#method_args为参数列表的dict
        request_args = {}
        url_secret ='sandbox642d8c408d84760fa0045ea79'  #修改配置
        url_str = '' + url_secret
        sign_list = []
        url_list =[]
        request_args = method_args
        for key,value in request_args.items():
            sign_list.append(key+value)
            url_list.append(key + '=' + value.encode('UTF-8'))
        sign_list.sort()
        for item in sign_list:
            url_str += item
        url_str = url_str + xml_body + url_secret
        sign_md5 = md5.new()
        sign_md5.update(url_str)
        sign = sign_md5.hexdigest().upper()  #签名生成,若仅需要签名,url生产部分可以忽略
        for item in url_list:
            url_head += '%s&' %(urllib.quote(item))
        final_url = url_head + 'sign=' + sign  #最终url生成
        return final_url
 
 
 

FAQ

1.Q:签名时注意timestamp字段的处理。
   A:timestamp字段做签名的时候,要用encode之前的,验证签名的时候,要用decode之后的。也就是,计算签名的时候都使用timestamp的原始数据。如:签名的时候用encode之前的timestamp2015-08-19 12:04:24,传URL的时候要encode,用stamptime2015-04-26%2000:00:07,校验签名的时候还是用timestamp2015-08-19 12:04:24。
 
2.Q: 什么是沙箱 appkey ,以及沙箱的secret怎么获取?
   A: 登陆开放平台 open.taobao.com ,进入控制台,找到对接奇门要使用的应用,应用设置里有沙箱环境的参数。

 
 3.Q:如何验证签名算法,有没有工具 ?
   A:有,在应用管理的奇门联调配置工具里( http://cloud.tmall.com/my/qimen/center/signatureBuilder.htm?spm=0.0.0.0.rEEw3E), 奇门接入工具-签名工具。


 
奇门白皮书V3.0 奇门标准化协议白皮书 立即下载

相关推荐

淘宝开发文档签名_md5加密java+c#.rar

淘宝开发文档签名_md5加密java+c#.rar 可立即用。已经把所有的都封装了。

淘宝奇门接口的签名方法

签名方法 package com.ruoyi.edi.service; import com.ruoyi.common.core.constant.Constants; import org.springframework.stereotype.Service; import javax.crypto.Mac; import javax.crypto.SecretKey; import ja...

darling331的博客 1879

签名工具Auto-sign

签名我们需要用到的工具是Auto-sign。它主要是利用批处理命令,使用signapk.jar对APK文件进行签名的。 把new.apk文件复制到签名软件的目录下,再用记事本打开Sign.bat,将其修改为如下代码: java -jar signapk.jar testkey.x509.pem testkey.pk8 XXX.apk newXXX.apk XXX.apk代表将要签名的,newXXX.apk签名后的 最后双击一下Sign.bat即可签名完成, 签名后的APK文件就可以在模拟器或者Android机器上安装了。

Android原生奇门遁甲排盘代码

奇门遁甲,风水八字等自动排盘 具体的逻辑主要是公历转为中国传统的农历 /** * @param rgz 日干 * @param curtime 时间 * @return */ public static List<Object> getPanInfo(long curtime, String rgz) {

dhd040805的博客 5072

Ubuntu22.04+Docker一键部署Autoware Universe避坑指南(附鱼香ROS配置)

本文详细介绍了在Ubuntu22.04系统中使用Docker一键部署Autoware Universe的完整流程,包括鱼香ROS工具链配置、Docker环境优化及VSCode开发环境集成。通过实战指南帮助开发者快速搭建自动驾驶开发环境,解决常见部署问题,提升开发效率。

weixin_29254673的博客 415

win2012没有远程桌面授权服务器可以提供许可证 如何远程

如果远程windows服务器时,提示“没有远程桌面授权服务器可以提供许可证 如何远程”,先通过以下方式进行强制登录,然后在对服务器进行设置即可,延期使用。 强制登录服务器方式; 1、运行—输入:mstsc /admin /v ip:端口 回车即可 2、进入远程桌面,输入 ip:端口 /admin 例如:mstsc /admin /v 192.168.0.131:23568 进入服务器以后,按照以下步骤进行设置即可: ...

蜗牛快爬 1万+

奇门如何验签及自研需要授权的接口接入奇门

您好,请检查您的验签方式是否正确。验签为了防止接口被人乱掉用,需要在服务端做验签的逻辑,校验请求的合法性。那么,API服务后端如何进行验签?由于API请求带有targetAppkey,而API服务后端可以通过应用管理拿到对应的appSecret,将奇门云网关生成的签名,与自己服务后端代码生成的签名进行校验,当然TOP API SDK也提供了相关的验签工具(SpiUtils),需要在执行接口逻辑前完成验签校验逻辑。验签返回报文验签的返回内容需要和响应失败的格式(参考上文响应失败参数)对应的上,系统要求如下:奇

lxw1844912514的博客 1646

第十二节:C#工业控制编程基础--输出正弦波实验

第十二节:基于c#使用开发板输出正弦波实验 文章目录第十二节:基于c#使用开发板输出正弦波实验一、实验目的:了解采集卡DA相关函数的使用。二、实验内容:利用C#生成正弦波,然后用采集卡DA输出。三、实验步骤:1.打开Visual Studio 2013,新建窗体应用程序项目,配置好板卡dll文件。2.在窗体中放入控件,对控件进行布局排版,并修改他们的Name属性和Text属性。3.在Chart控件内选择Spline型图表,如图2。4.进入编程区域,在public partial class Form1 :

weixin_49237052的博客 2296

C语言算法

目录 1.河内之塔........................................................................................................................................ 4 2.Algorithm Gossip: 费式数列..........................

lwq132279的专栏 2760

Source Insight 4.0 及最新版序列号验证机制全解析:如何快速定位关键函数并构造有效Key

本文深入解析了Source Insight 4.0及最新版的序列号验证机制,详细介绍了如何快速定位关键函数并构造有效Key。通过静态分析和动态调试技术,帮助开发者理解现代软件保护的设计哲学,掌握逆向分析方法论,提升安全研究能力。

weixin_26642481的博客 426

别再纠结了!实测罗技Flow、对拷线、微软Mouse without Borders,我的最终选择是...

本文通过实测对比罗技Flow、对拷线和微软Mouse without Borders等多设备控制方案,详细分析了各自的优缺点及适用场景。作者最终选择了对拷线与罗技键鼠的组合方案,为专业用户提供了稳定可靠的多设备协同办公解决方案,特别适合需要频繁传输大文件和跨设备操作的用户。

weixin_33696106的博客 405

记录一次调用奇门api报错信息Invalid signature (签名无效)

很奇怪----下第一个打印是正常的,而第二个出现 错误,我对map底层没有特别多的理解。修改Map<String,String>参数名称为map。奇门有msg对应错误的记录。

andrew_dear的博客 1550

MicroBlaze系列教程(5):AXI_UART16550的使用

axi-uart16550是Xilinx的一款串口IP核,支持配置成16450或16550模式,16550和16450是指的早期电脑主板上的串口芯片型号,16550相比于16450多了FIFO,现在已经很少使用。相比于,16550支持1或2位停止位,包括uartlite所有的功能,而且支持在SDK中灵活对波特率、数据、校验方式进行配置。与uartlite不同的是,不能单独指定发送中断和接收中断函数,只有一个中断函数,通过event参数来区分当前是发送或接收中断。

whik1194的博客 4542

太公奇门排盘算法(golang 版本)

各位网友大家好,团队之前独立开发一套玄学排盘算法app,其中有八字排盘算法源代码,八字合婚排盘算法源代码,阳盘奇门算法源代码,阴盘奇门排盘算法源代码,太公奇门排盘算法源代码。太公奇门排盘算法与原来h5版本的排盘相同(http://www.jtimepower.cn),区别在于,网页版本由于受品牌手机,与浏览器的限制,在算法计算时,浏览器容易出现错误,导致计算不准确。如图,左边为我们系统的排盘,右图为网页版本(http://www.jtimepower.cn)的的排盘格式。

qq_23922245的博客 960

腾讯滑块验证码防水墙 tdc.js 补环境实录

腾讯滑块验证码破解研究摘要 本文记录了破解腾讯防水墙滑块验证码(tdc.js)的全过程。研究重点包括: 流程分析:通过抓包分析验证码完整链路,识别出关键参数collect和eks需从tdc.js虚拟机获取 环境模拟:采用渐进式补环境方法,针对字节码虚拟机特性构建完整的window对象,包括navigator、screen、canvas等API的精确模拟 核心破解:成功调用TDC.getData()和TDC.getInfo()获取关键参数,解决POW计算和滑块缺口识别问题 优化调整:针对errorCode 5

码王吴彦祖的博客 227

BME688传感器原理图设计,已量产(环境传感器)

在便携式空气质量监测、可穿戴健康设备这类低功耗场景中,BME688 这类集成了 VOC、温湿度、气压的四合一 MEMS 传感器越来越受欢迎 —— 它体积小、功耗低,刚好匹配便携设备的需求。但这类小信号传感器对电源噪声、电平匹配的要求很细,今天结合实际项目里的一款 BME688 接口电路,聊聊硬件设计的关键细节。

不脱发的程序猿 514

九宫怎么排列和使用_奇门遁甲九宫数字 九宫数字的排列和算法

奇门遁甲作为一种非常重要的传统文化,但是现在人们对于奇门遁甲的了解却是非常少的,大多数的朋友们对于奇门遁甲仅限于听说过,其实奇门遁甲是非常深奥的,另外,如果我们大家想要深入的了解,那么必须要知道奇门遁甲九宫数字是怎么回事,接下来我们一起详细的看看。奇门遁甲九宫数字奇门遁甲九宫数字是怎么回事?一般都是这样的:1甲子、2乙丑 、 3丙寅 、4丁卯、 5戊辰、 6已巳、 7庚午、 8辛未、 9壬申、 1...

weixin_35947010的博客 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

阴盘奇门排盘算法(golang 源码)

各位网友大家好,团队之前独立开发一套玄学排盘算法app,其中有八字排盘算法源代码,八字合婚排盘算法源代码,阳盘奇门算法源代码,阴盘奇门排盘算法源代码,太公奇门排盘算法源代码。整套服务使用gin框架为基础,纯golang编写,不纯在使用第三方代码。一般手工计算排盘,步骤分这些,不一一列举了,正常时间盘在所有类型盘当中,基本只占一半多,还有近四分之一特殊盘,没有公开。如图,为我们系统的排盘,盘中把所有刑破墓空等全部标记出。整套系统全部是自己团队研发的,全部代码都可编辑,网友需要联系。

qq_23922245的博客 634

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

阳盘奇门排盘算法(golang 源码)

各位网友大家好,团队之前独立开发一套玄学排盘算法app,其中有八字排盘算法源代码,八字合婚排盘算法源代码,阳盘奇门算法源代码,阴盘奇门排盘算法源代码,太公奇门排盘算法源代码。整套服务使用gin框架为基础,纯golang编写,不纯在使用第三方代码。一般手工计算排盘,步骤分这些,不一一列举了,正常时间盘在所有类型盘当中,基本只占一半多,还有近四分之一特殊盘,没有公开。如图,为我们系统的排盘,盘中把所有刑破墓空等全部标记出。整套系统全部是自己团队研发的,全部代码都可编辑,网友需要联系。

qq_23922245的博客 535

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

奇门起局的可复现算法:从公历到九宫盘的四步流程

值符(首脑符号)随时干所在宫落定,其余天干依地盘次序飞布。这一步是"地盘 → 天盘"的映射函数。**论断:奇门排盘是一个确定性的四步算法,玄学盘由此变成可复现、可测试的结构化数据。依节气与符头(甲己日)确定用阳遁还是阴遁,以及 1–9 哪一局。

haipaiqimeng的博客 569

基于 AI+算法的飞盘奇门遁甲排盘系统

《开源飞盘奇门排盘系统》摘要:该项目基于传统飞盘奇门遁甲算法,实现了市面上罕见的全动态排盘系统。核心功能包括:1)严格遵循古籍的飞盘模式排盘(阳顺阴逆);2)自动真太阳时计算(支持经纬度校正);3)独创的AI分析引擎(规则判断+大模型解读)。技术亮点在于攻克了飞盘算法散佚的难题,采用纯前端实现确保隐私安全,并创新性地将状态机与大模型结合进行智能分析。项目完全开源,支持多终端访问,未来计划扩展更多流派支持和移动端应用。作者希望通过技术手段保存和传播这一传统文化遗产。

ws287755802的专栏 657

淘宝开放平台奇门接口 Java 验签实战:Spring Boot 接收 XML 请求与 3 种签名算法解析

本文详细解析了淘宝开放平台奇门接口的Java验签实战,重点介绍了Spring Boot接收XML请求的实现方法及三种签名算法(MD5、HMAC-MD5、HMAC-SHA256)的对比与应用场景。通过实战代码示例和调试技巧,帮助开发者高效完成系统对接与联调,确保数据传输的安全性和完整性。

weixin_32705179的博客 330

仿先卜php阴盘奇门排盘的算法简述以及php的代码实现开源支持二开

阴盘奇门,是奇门遁甲的一种,奇门遁甲分阴盘阳盘,阴盘最最近比较流行的一种方式 ,区别于传统排盘,判断较准,排盘更清晰简洁。

php全栈程序员。国学api开发。 1873

简单易懂的现代奇门四盘演算

计算此时奇门八卦天地人神四盘的算法

墨的博客 822

一个基于现代 C++23 Modules 的传统文化算法库,使用纯模块化设计实现(包含大六壬、六爻、紫薇斗数、八字、奇门遁甲)

ZhouYiLab是一个基于C++23 Modules的传统文化算法库,采用纯模块化设计实现周易相关术数系统。项目整合了多种传统命理算法,包括大六壬、六爻、紫微斗数、八字排盘、奇门遁甲等,并支持农历历法转换功能。核心特性包括:完全模块化架构(采用.cppm模块接口文件)、现代化构建系统(CMake 4.1.2+)、严格的C++23规范要求(支持import std标准库模块)。项目通过Git子模块管理第三方依赖,提供跨平台构建能力,展示了如何用现代C++技术重构传统文化算法。代码结构清晰,包含核心干支系统、

yudaichenydc的博客 1732

电脑版数字奇门遁甲排盘系统 v1.0版本使用说明

无论是对于初入门径的爱好者,还是对于需要频繁排盘的研究者,本软件都是一个值得推荐的工具。软件采用纯内置算法,不依赖外部天文库,能够精准推算1900年至2100年间的任意公历时间所对应的奇门格局,并生成包含九宫、九星、八门、八神、九干在内的完整排盘数据及六位数字盘,为奇门遁甲爱好者、研究者提供数字化学习与研究支持。本软件以“时家奇门-转盘-拆补法”为核心算法模型,严格遵循传统奇门遁甲的排盘规则,包括四柱八字换算、节气与局数确定、符头与旬首计算、直符直使定位、天地人神四盘布列等关键步骤。

qq_32257509的博客 1209
上一篇: 如何写出安全的API接口(参数加密+超时处理+私钥验证+Https)- 续(附demo)
下一篇: swagger
hljjava
博客等级 码龄18年 7粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值