C解析8583报文55域
以下这段代码是C解析8583报文,我直接从我们系统粘贴出来的,供大家参考。打日志log部分,请自行更改,TAG标签也可以根据你的55域做相应删减。
typedef struct
{
char sFldTag[5];
char sFldLen[3];
int nFldLen;
char sFldVal[65];
} T_F55_Sub_Fld;
/*--------------------------------------------------------------------------
FUNCTION NAME: TxnChkIcData.
DESCRIPTION: pCardNo 卡号
PARAMETER: pCardSeqId 卡序列号,域23
data IC卡数据域,域55
len 域55头长度
RETURN: result :0 -success other-failure
NOTE: xq 20150617
*------------------------------------------------------------------------ */
int TxnChkIcData1(const char * pCardNo, const char * pCardSeqId, char *data, int *len)
{
char sHexData[255 * 2] = {0};
char sCardSeqId[4];
char sCardNo[20];
char bank_code[9];
int nHexDataLen = (*len)*2;
int nRet = 0;
char sSrc[512];
int msg_len = 0;
memset(sCardNo, 0x00, sizeof(sCardNo));
memset(sCardSeqId, 0x00, sizeof(sCardSeqId));
memcpy(sCardNo, pCardNo, 19);
memcpy(sCardSeqId, pCardSeqId, 3);
memcpy(sHexData, data, nHexDataLen);
vLogErr(0, "nHexDataLen=[%d],sHexData=[%s]",nHexDataLen,sHexData);
/* 解析IC卡数据 */
T_F55_Sub_Fld tF55SubFld4[16];
T_F55_Sub_Fld tF55SubFld2[15];
memset(&tF55SubFld4, 0x00, sizeof(T_F55_Sub_Fld) * 15);
memcpy(tF55SubFld4[0].sFldTag, "9F26", 4); /* 应用密文 */
memcpy(tF55SubFld4[1].sFldTag, "9F27", 4); /* 密文信息数据 */
memcpy(tF55SubFld4[2].sFldTag, "9F10", 4); /* 发卡行应用数据 */
memcpy(tF55SubFld4[3].sFldTag, "9F37", 4); /* 不可预知数 */
memcpy(tF55SubFld4[4].sFldTag, "9F36", 4); /* 应用交易计数器 */
memcpy(tF55SubFld4[5].sFldTag, "9F02", 4); /* 授权金额 */
memcpy(tF55SubFld4[6].sFldTag, "5F2A", 4); /* 交易货币代码 */
memcpy(tF55SubFld4[7].sFldTag, "9F1A", 4); /* 终端国家代码 */
memcpy(tF55SubFld4[8].sFldTag, "9F03", 4); /* 其他金额 */
memcpy(tF55SubFld4[9].sFldTag, "9F33", 4); /* 终端性能 */
memcpy(tF55SubFld4[10].sFldTag, "9F34", 4);
memcpy(tF55SubFld4[11].sFldTag, "9F35", 4);
memcpy(tF55SubFld4[12].sFldTag, "9F1E", 4);
memcpy(tF55SubFld4[13].sFldTag, "9F63", 4); /*银行编码*/
memcpy(tF55SubFld4[15].sFldTag, "9F09", 4);
memcpy(tF55SubFld4[14].sFldTag, "9F41", 4);
memset(&tF55SubFld2, 0x00, sizeof(T_F55_Sub_Fld) * 15);
memcpy(tF55SubFld2[0].sFldTag, "95", 2); /* 终端验证结果 */
memcpy(tF55SubFld2[1].sFldTag, "9A", 2); /* 交易日期 */
memcpy(tF55SubFld2[2].sFldTag, "9C", 2); /* 交易类型 */
memcpy(tF55SubFld2[3].sFldTag, "82", 2); /* 应用交互特征 */
memcpy(tF55SubFld2[4].sFldTag, "91", 4); /* 发卡行验证数据 */
memcpy(tF55SubFld2[5].sFldTag, "84", 4);
memcpy(tF55SubFld2[6].sFldTag, "9A", 4);
memcpy(tF55SubFld2[7].sFldTag, "9C", 4);
int nHexDataPos = 0;
int nFldLen = 0;
while (nHexDataPos < nHexDataLen)
{
char sTag[5] = {0};
memcpy(sTag, &sHexData[nHexDataPos], 4);
int i = 0;
for (i = 0; i < 16; i++)
{
if (memcmp(&sHexData[nHexDataPos], tF55SubFld4[i].sFldTag, 4) == 0)
{
nHexDataPos += 4;
memcpy(tF55SubFld4[i].sFldLen, &sHexData[nHexDataPos], 2);
if(tF55SubFld4[i].sFldLen[0] == '1')
tF55SubFld4[i].nFldLen = fun(tF55SubFld4[i].sFldLen) * 2;
else
tF55SubFld4[i].nFldLen = atol(tF55SubFld4[i].sFldLen) * 2;
nHexDataPos += 2;
memcpy(tF55SubFld4[i].sFldVal, &sHexData[nHexDataPos], tF55SubFld4[i].nFldLen);
nHexDataPos += tF55SubFld4[i].nFldLen;
break;
}
}
if (i == 16)
{
memcpy(sTag, &sHexData[nHexDataPos], 2);
for (i = 0; i < 8; i++)
{
if (memcmp(&sHexData[nHexDataPos], tF55SubFld2[i].sFldTag, 2) == 0)
{
nHexDataPos += 2;
memcpy(tF55SubFld2[i].sFldLen, &sHexData[nHexDataPos], 2);
tF55SubFld2[i].nFldLen = atol(tF55SubFld2[i].sFldLen) * 2;
nHexDataPos += 2;
memcpy(tF55SubFld2[i].sFldVal, &sHexData[nHexDataPos], tF55SubFld2[i].nFldLen);
nHexDataPos += tF55SubFld2[i].nFldLen;
break;
}
}
if (i == 8)
{
break;
}
}
}
#if 0
vLogErr(0, "tF55SubFld4[0].nFldLen[%d]",tF55SubFld4[0].nFldLen);
vLogErr(0, "tF55SubFld4[1].nFldLen[%d]",tF55SubFld4[1].nFldLen);
vLogErr(0, "tF55SubFld4[2].nFldLen[%d]",tF55SubFld4[2].nFldLen);
vLogErr(0, "tF55SubFld4[3].nFldLen[%d]",tF55SubFld4[3].nFldLen);
vLogErr(0, "tF55SubFld4[4].nFldLen[%d]",tF55SubFld4[4].nFldLen);
vLogErr(0, "tF55SubFld4[5].nFldLen[%d]",tF55SubFld4[5].nFldLen);
vLogErr(0, "tF55SubFld4[6].nFldLen[%d]",tF55SubFld4[6].nFldLen);
vLogErr(0, "tF55SubFld4[7].nFldLen[%d]",tF55SubFld4[7].nFldLen);
vLogErr(0, "tF55SubFld4[8].nFldLen[%d]",tF55SubFld4[8].nFldLen);
vLogErr(0, "tF55SubFld4[9].nFldLen[%d]",tF55SubFld4[9].nFldLen);
vLogErr(0, "tF55SubFld4[13].nFldLen[%d]",tF55SubFld4[13].nFldLen);
vLogErr(0, "tF55SubFld4[0].sFldVal[%s]",tF55SubFld4[0].sFldVal);
vLogErr(0, "tF55SubFld4[1].sFldVal[%s]",tF55SubFld4[1].sFldVal);
vLogErr(0, "tF55SubFld4[2].sFldVal[%s]",tF55SubFld4[2].sFldVal);
vLogErr(0, "tF55SubFld4[3].sFldVal[%s]",tF55SubFld4[3].sFldVal);
vLogErr(0, "tF55SubFld4[4].sFldVal[%s]",tF55SubFld4[4].sFldVal);
vLogErr(0, "tF55SubFld4[5].sFldVal[%s]",tF55SubFld4[5].sFldVal);
vLogErr(0, "tF55SubFld4[6].sFldVal[%s]",tF55SubFld4[6].sFldVal);
vLogErr(0, "tF55SubFld4[7].sFldVal[%s]",tF55SubFld4[7].sFldVal);
vLogErr(0, "tF55SubFld4[8].sFldVal[%s]",tF55SubFld4[8].sFldVal);
vLogErr(0, "tF55SubFld4[9].sFldVal[%s]",tF55SubFld4[9].sFldVal);
vLogErr(0, "tF55SubFld4[13].sFldVal[%s]",tF55SubFld4[13].sFldVal);
vLogErr(0, "tF55SubFld2[0].nFldLen[%d]",tF55SubFld2[0].nFldLen);
vLogErr(0, "tF55SubFld2[1].nFldLen[%d]",tF55SubFld2[1].nFldLen);
vLogErr(0, "tF55SubFld2[2].nFldLen[%d]",tF55SubFld2[2].nFldLen);
vLogErr(0, "tF55SubFld2[3].nFldLen[%d]",tF55SubFld2[3].nFldLen);
vLogErr(0, "tF55SubFld2[0].sFldVal[%s]",tF55SubFld2[0].sFldVal);
vLogErr(0, "tF55SubFld2[1].sFldVal[%s]",tF55SubFld2[1].sFldVal);
vLogErr(0, "tF55SubFld2[2].sFldVal[%s]",tF55SubFld2[2].sFldVal);
vLogErr(0, "tF55SubFld2[3].sFldVal[%s]",tF55SubFld2[3].sFldVal);
#endif
}
C解析8583报文55域相关推荐
- java解析8583报文55域
package com.xq.src; import java.util.ArrayList; import java.util.HashMap; import java.util.List; ...
- java 8583报文解析_java解析8583报文55域
package com.xq.src; import java.util.ArrayList; import java.util.HashMap; import java.util.List; imp ...
- java 8583报文解析_8583报文 55域JAVA的解析
银联55域 : 本域将根据不同的交易种类包含不同的子域.银联处理中心仅在受理方和发卡方之间传递这些适用于IC卡交易的特有数据,而不对它们进行任何修改和处理. 为适应该子域需要不断变化的情况 ,本域 ...
- java 传送解析8583报文_java发送ISO8583报文接口案例
[实例简介] java发送ISO8583报文实现平安银行支付接口 [实例截图] [核心代码] pingAnBank └── pingAnBank ├── build.xml ├── client │ ...
- java 8583报文解析_ISO8583报文工具类(组装和解析报文) | 学步园
很久没来csdn了.现在的工作地点在银行,妈的,不让上网啊. 写写博客其实是对自己知识的总结,这么长时间了,也该写点东西了.接触银行的项目,避免不了 遇上8583报文.具体介绍就不细讲了,这个网上一大 ...
- 银联8583报文规范详解
银联8583报文规范详解 自己的理解 转载的内容 自己的理解 转载的内容 以下来自转载地址 https://www.jianshu.com/p/203ed7f632cf 一.什么是8583报文规范? ...
- 8583报文举例解读及推荐阅读
一.推荐阅读 https://www.cnblogs.com/fenglan/p/6088690.html 这篇博客生动形象的解释了8583报文,首先推荐给之前一点都不了解8583报文的同学. 然后参 ...
- Spring 整合Socket实现8583报文服务
银行业务需求实现一个8583的报文服务,实现后续业务. 然后作者在网上找了一个改造了一下.主要参考: https://www.tangyuecan.com/2019/01/11/spring-boot ...
- 8583报文解析1.0
8583报文解析1.0 文章目录 8583报文解析1.0 一.规则 1.1:域规范简表 1.2:规范说明 1.2.1: 报文头 1.2.2: 操作类型 1.2.3: 位图:有效域明细 1.2.4:域规 ...
最新文章
- error aborting mysql,mysql错误1067,mysql1067错误aborting
- Leetcode 95. 不同的二叉搜索树 II 解题思路及C++实现
- 【Python】Time库的使用(含实例)
- html中盒子模型立体结构图
- CCF——图像旋转201503-1
- final、finally与finalize的区别
- linux怎样判断线程是否暂停_怎样判断股市是否会继续下跌?
- CentOS 6,7系统服务管理
- CSDN如何修改自己的博客名称
- matlab 边缘检测 抠图,ps如何调整边缘的流程:边缘检测、调整边缘、输出(调整边缘抠图...
- AtCoder Beginner Contest 161 C Replacing Integer 公式推导
- 用jxcell导出图表到excel
- 定位服务在iOS 8中不起作用
- 如何破解运动世界校园模拟器检测
- 深入了解中文版AutoCAD 2022:功能、优势和应用
- 物联网导论-自动识别技术
- 淘宝二维码显示与隐藏
- sqlserver数据库如何快速查看表结构sql
- 用ue4怎么制作一个物体故障闪烁的特效
- ARM的IRQ模式和FIQ模式
热门文章
- root 红米note5_怎么开启红米Note 5的ROOT权限
- Microbiome:40年施肥处理后固氮菌及氮固定受抑制
- 基于51单片机的RFID一卡通刷卡扣费充值系统设计原理图程序设计
- CCNA实验:实验二:交换机和路由器的IOS备份与恢复
- Google Earth Engine——可视化的美国加州圣华金河流域的100年气候预测模型
- matlab测量直流母线上的电压,基于模糊控制的有源滤波器直流母线电压控制
- Segment routing分段路由
- PredRNN++: Towards A Resolution of the Deep-in-Time Dilemma in Spatiotemporal Predictive Learning 翻译
- pythonGUI实现照片或证件照迅速更换自定义背景底色
- 手把手教你撸一个Web汇率计算器