linlias12 2014-05-30 09:41 采纳率: 0%
浏览 2694

8583报文MAC算法以及MAC串的数据格式问题

最近在做8583的接口联调,目前手头只有一份文档描述,小弟也是头一次接触8583,目前卡在MAC校验这一关了,无论怎么算MAC,发过去返回的都是A0,MAC校验错,
原8583文档关于MAC算法描述如下:

将欲发送给POS中心的消息中,从消息类型(MTI)到63域之间的部分构成MAC ELEMEMENT BLOCK (MAB)

问题就是,这个发送给POS中心的消息格式到底要什么样的?

比如原数据:

loginData.put("2", "4367450070849241");// 主帐号 最大19字节BCD
        loginData.put("3", "000000");// 处理码  定长6字节
        loginData.put("4", "000000000001");// 交易金额 定长12字节
        loginData.put("11", "123456");// 流水号 定长6字节
        //loginData.put("14", "0218");// 有效期 定长4字节 
        loginData.put("22", "012");//输入方式码 后一个0为左靠右补0 定长3字节
        loginData.put("25", "00");//服务点条件码 消费固定00
        loginData.put("41", "00015719");//终端号
        loginData.put("42", "105110070110485");// 商户号
        loginData.put("49", "156");//货币代码 000000080030
        loginData.put("60", "22000008"); //2200009100050

以上是原数据。
拼装成字符串后:

4367450070849241000000000000000001123456012000001571910511007011048515622000008

按照文档要求,对一些数据进行左补空格 或者右补‘0’或者转化为16进制位后:

4360075312486901000000000000000001123456012 ** 0 ** 000001531110500327001051131353622000005003 ** 0 **

再给各个数字域添加长度后:
** 16 ** 436007531248690100000000000000000112345601200000015311105003270010511313536 ** 0011 ** 220000050030

以上这几种 到底应该选哪种去做MAC运算呢?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
    • ¥15 matlab有关常微分方程的问题求解决
    • ¥15 perl MISA分析p3_in脚本出错
    • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
    • ¥15 ubuntu虚拟机打包apk错误
    • ¥199 rust编程架构设计的方案 有偿
    • ¥15 回答4f系统的像差计算
    • ¥15 java如何提取出pdf里的文字?
    • ¥100 求三轴之间相互配合画圆以及直线的算法