⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cispub.cpp

📁 液晶电视完整代码可实现人机界面
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/******************************************    小额支付系统支票截留业务公共处理函数******************************************/#include <sys/time.h>#include <stdlib.h>#include <stdio.h>#include <math.h>#include <netdb.h>#include <sys/select.h>#include <sys/socket.h>#include <sys/time.h>#include <arpa/inet.h>#include "sybdblib.hpp"#include "CisPub.hpp"#include "libcore.h"#include "md5.h"#include "CBase64.h"#include "cnapstag.hpp"#include "mblib.h"#define CISINFO  "CisIdx, MbfeIdx, doflag, rsflag, OprNo, PkgType, TrxsType,\            PreDate, TrxNo, RecverBKCD, RecverACC, RecverName,PayerBKCD, \            PayerACC,PayerName, MEYSYB, Amount, AccKind, AccNo,   ChkDate,\            AccDate, AccPsw,	Info,    Remark,  SysDate, RtnLimted, SRCFlag,\            ChkSatus,	PicFront,PicBack,SignInfo,RedoCount, RedoInfo,CisData,\            TagData"  //全局变量extern SybServer m_clsSybServer;extern int errno;//typedef unsigned short WORD;//typedef unsigned char  UCHAR;//typedef unsigned char  BYTE;SybCommand  clsSybCommand(m_clsSybServer);SybResultset  clsSybResultset(m_clsSybServer);///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////判断字符串是否为空BOOL     IsEmptyStr( char *in_data ){        int i,j = 0;        char tmp[1024];        memset(tmp,0,sizeof(tmp));        for(i = 0;i < strlen(in_data);i++)        {                if(in_data[i] != ' ')                        tmp[j++] = in_data[i];        }        if( strlen(tmp) == 0 )	{		return FALSE;	}        return TRUE;}//去字符串空格函数 BOOL     StrTrim( char *in_data ){        int i,j = 0;        char tmp[1024];        memset(tmp,0,sizeof(tmp));        for(i = 0;i < strlen(in_data);i++)        {                if(in_data[i] != ' ')                        tmp[j++] = in_data[i];        }	strcpy( in_data , tmp);        return TRUE;}BOOL BinToAsc(unsigned char* inPut, int inLen, char* outPut, int outLen){	if(inPut == NULL || outPut == NULL)	{		return FALSE;	}	if(outLen != 2*inLen)	{		return FALSE;	}		int tmp = 0;	for (int i=0;i<inLen;i++)	{		//高位处理		tmp = (inPut[i]>> 4) & 0X0F;		if (tmp < 10)			outPut[2*i] = tmp + 48 ;		else			outPut[2*i] = tmp + 55 ;		//低位处理		tmp = inPut[i] & 0X0F;		if (tmp < 10)			outPut[2*i+1] = tmp + 48 ;		else			outPut[2*i+1] = tmp + 55 ;	}		filelog(CIS_SRV_LOG, "BinToAsc::OutPut=[d][%s]", outLen, outPut);	return TRUE;}//BASE64加密算法int SH_EncodeBase64(char *pASCSrc,char *pBase64Res){	int  srcLen;	char cMap[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 	char  *pCurSrc,*pCurRes;	int  i,j,k,group;	char ch_Asc[4],ch_Base[4],ch,cha;		if(!pASCSrc || !pBase64Res) return -1;	srcLen = strlen(pASCSrc);	if(srcLen<1)	{	*pBase64Res = 0;		return -1;	}		group = srcLen/3;	i = 0;	pCurSrc = pASCSrc;	pCurRes = pBase64Res;	while(i<group)	{	for(j=0;j<3;j++)		{	if(pCurSrc[j]!=0)			{	ch_Asc[j] = *(pCurSrc+j);					}			else			{	for(k=j;k<4;k++)				{	ch_Asc[k] = 0;				}			}		}		ch_Base[0] = ((ch_Asc[0]>>2)&0x3f);		*pCurRes = cMap[ch_Base[0]];				ch_Base[1] = ((ch_Asc[0]<<4)&0x30);		ch_Base[1] += ((ch_Asc[1]>>4)&0x0f);		*(pCurRes+1) = cMap[ch_Base[1]];				ch_Base[2] = (ch_Asc[1]<<2)&0x3c;		ch_Base[2] += ((ch_Asc[2]>>6)&0x03);		*(pCurRes+2) = cMap[ch_Base[2]];				ch_Base[3] = (ch_Asc[2]&0x3f);		*(pCurRes+3) = cMap[ch_Base[3]];				i++;		pCurSrc+=3;		pCurRes+=4;	}	if((srcLen%3) == 1)	{	ch = *pCurSrc;		ch = ch>>2;		ch = ch&(0x3f);		*(pCurRes++) = cMap[ch];		ch = *pCurSrc;		ch = ch<<4;		ch = ch&(0x30);		*(pCurRes++) = cMap[ch];		*(pCurRes++) = '=';		*(pCurRes++) = '=';		*pCurRes = 0;	}	else if((srcLen%3) == 2)	{	ch = *pCurSrc;		ch = (ch>>2);		ch = ch&(0x3f);		*(pCurRes++) = cMap[ch];		ch  = *pCurSrc;		cha = *(pCurSrc+1);		ch  = ch<<4;		ch  = ch&(0x30);		cha = (cha>>4);		cha = cha&(0x0f);		cha += ch;		*(pCurRes++) = cMap[cha];		ch = *(pCurSrc+1);		ch = ch<<2;		ch = (ch&(0x3c));		*(pCurRes++) = cMap[ch];		*(pCurRes++) = '=';		*pCurRes = 0;	}	else		*pCurRes = 0;	return 1;}//BASE64加密算法int SH_DecodeBase64(char *pBase64Src,char *pASCRes){	int  srcLen;	char  *pCurSrc,*pCurRes;	int  i=0,j,group;	char ch[4],ch_Asc[4];		srcLen = strlen(pBase64Src);	if(srcLen % 4 != 0) 	{	*pASCRes = 0;		return -1;	}	group = srcLen/4;	pCurSrc = pBase64Src;	pCurRes = pASCRes;	do	{	for(j=0;j<4;j++)		{	ch[j] = *(pCurSrc+j);			if(ch[j]>='A' && ch[j]<='Z')			{	ch_Asc[j] = ch[j] - 'A';			}			else if(ch[j]>='a' && ch[j]<='z')			{	ch_Asc[j]  = ch[j] -'a' + 26;			}				else if(ch[j]>='0' && ch[j]<='9')			{	ch_Asc[j] = ch[j] - '0' + 52;			}			else if(ch[j] == '+')			{	ch_Asc[j] = 62;			}			else if(ch[j] == '/')			{	ch_Asc[j] = 63;			}			else if(ch[j] == '=')			{	ch_Asc[j] = '=';			}			else			{	*pASCRes = 0;				return -1;			}		}			*pCurRes = (ch_Asc[0]<<2) + (((ch_Asc[1]&0x30)>>4)&0x0f);		if(ch[2]!='=')			*(pCurRes+1) = ((ch_Asc[1]&0x0f)<<4) + (((ch_Asc[2]&0x3c)>>2)&0x3f);		else		{	*(pCurRes+1) = (ch_Asc[1]&0x0f)<<4;			*(pCurRes+2) = 0;			return 1;		}		if(ch[3]!='=')			*(pCurRes+2) = ((ch_Asc[2]&0x03)<<6) + ch_Asc[3];		else		{	*(pCurRes+2) = (ch_Asc[2]&0x03)<<6;			*(pCurRes+3) = 0;			return 1;		}		i++;		pCurRes += 3;		pCurSrc += 4;	}while(i<group);	*(pCurRes) = 0;	return 1;}//和行内对接int SndRcvData( char *ip, WORD port, char *pSBuf, char *pRBuf ,WORD iSlen,WORD *iRlen){	struct sockaddr_in dst_addr;    	struct linger  tcp_linger;	int ret = 0;	int nsocket = 0;	long optval;	long optlen;	struct   fd_set   fds;	struct   timeval  waittime;	optval = 1;	optlen = sizeof(optval);	nsocket = socket(AF_INET, SOCK_STREAM, 0);	if (nsocket == -1) {		printf("产生加密套接字失败!\n");		return -2;	}	bzero((char *)&dst_addr, sizeof(dst_addr));	dst_addr.sin_family= AF_INET;	dst_addr.sin_port  = htons(port);             /*加密机端口*/	dst_addr.sin_addr.s_addr = inet_addr(ip);	ret = connect(nsocket, (struct sockaddr *)&dst_addr, sizeof(dst_addr));	if (ret == -1) {		 printf("连接失败[%d][%s]\n",ret,strerror(errno));		 close(nsocket);		 return -1;	}	tcp_linger.l_onoff = 1; /* Linger On */	tcp_linger.l_linger= 0; /* 0 seconds */	ret = setsockopt(nsocket,SOL_SOCKET,SO_LINGER,&tcp_linger,sizeof(struct linger));	if(ret == -1) {		 printf("设置参数失败[%d][%s]!\n",ret,strerror(errno));		 close(nsocket);		 return -1;	}	ret = setsockopt(nsocket, SOL_SOCKET, SO_REUSEADDR, &optval, optlen);	if(ret == -1) {		 printf("设置参数失败[%d][%s]!\n",ret,strerror(errno));		 close(nsocket);		 return -1;	}	ret = setsockopt(nsocket, SOL_SOCKET, SO_KEEPALIVE, &optval, optlen);	if(ret == -1) {		 printf("设置参数失败[%d][%s]!\n",ret,strerror(errno));		 close(nsocket);		 return -1;	}	/* 检查是否可以发送 */	waittime.tv_sec = 3;	waittime.tv_usec = 0;           	FD_ZERO(&fds);	FD_SET(nsocket,&fds);	ret = select(nsocket + 1,NULL,&fds,NULL,&waittime);	if ( ret <=0 ) {		return -1;	}	/* 发送数据 */	ret = send(nsocket,pSBuf,iSlen,0);	if (ret < 0) {		return -1;        	}	/* 是否有接收数据 */	FD_ZERO(&fds);	FD_SET(nsocket,&fds);	ret = select(nsocket + 1, &fds,NULL,NULL, &waittime);	if(ret <= 0){		return -1;	}	/* 接收数据 */	memset(pRBuf,0,sizeof(pRBuf));	ret = recv(nsocket,pRBuf,4096,0);	printf("IN SndRcvData:ret = [%d]",ret);	/*返回的结果太少*/	if ( ret < 1){		return -1;	}	*iRlen = ret;	return 0;     }//和行内对接int MbAPI( int type, char *brchno, char *tellerno, char *pwd, char *workdate, char *strNo,char *ip, int port){	char pSBuf[255], pRBuf[255];	WORD iSlen = 0, iRlen = 0;	memset( pSBuf, 0, sizeof( pSBuf ));	memset( pRBuf, 0, sizeof( pRBuf ));    	char strno[10];	memset(strno,0,sizeof(strno));	int len=strlen(brchno);	strcpy(strno,brchno+6);	/* 小心通讯流水号 */	if ( type == 0 )//	sprintf(pSBuf, "0053000104000001001000000051100104p2 10406     %-16.16s2007/04/0323:13:3300",pwd);	sprintf(pSBuf, "0053000%s%s001000000%9.9sp2 %5.5s     %-16.16s%10.10s11:12:2200", 	strno,strNo,brchno, tellerno, pwd, workdate );	else	sprintf(pSBuf, "0053000%s%s001010000%9.9sp2 %5.5s     %-16.16s%10.10s11:12:2200", strno,strNo,brchno, tellerno, pwd, workdate );	iSlen = strlen( pSBuf );	if ( SndRcvData( ip, port, pSBuf, pRBuf ,iSlen, &iRlen) <> 0 )	{		printf("通讯失败!\n");		return -1;	}	printf("[%.4s]\n", pRBuf+21);	if (memcmp( pRBuf + 21, "0000", 4 ) == 0)		return 0;	return -1;}//格式化金额int GetAmount(char *in_data,char *out_data){	char sAmount[100],sAmount0[100];	char tmp[100];	int i,j,k;	int len;	char RMB[4],TmpOut[50];		//	printf("Enter GetAmount....\n");	memset(sAmount,0,sizeof(sAmount));	memset(sAmount0,0,sizeof(sAmount0));	memset(tmp,0,sizeof(tmp));	memset(RMB,0,sizeof(RMB));	memset(TmpOut,0,sizeof(TmpOut));	memcpy( RMB , in_data , 3 );	len = strlen(in_data)-3;	strcpy(tmp,in_data+3);	for(i = 0;i<len;i++)	{		if(tmp[i] <= '9' && tmp[i] > '0')		{		strcpy(sAmount,&tmp[i]);		break;		}	}	len = strlen(sAmount);	if( len == 0)	{		sprintf( out_data , "%s0.0",RMB);		printf("Before = [%s] After = [%s]\n", in_data,out_data);		return 0;	}	if( len == 1)	{		sprintf( out_data , "%s0.0%s",RMB,sAmount);		printf("Before = [%s] After = [%s]\n", in_data,out_data);		return 0;	}	if( len == 2)	{		sprintf( out_data , "%s0.%s",RMB,sAmount);		printf("Before = [%s] After = [%s]\n", in_data,out_data);		return 0;	}	memset(tmp,0,sizeof(tmp));	for(i = 0;i < len;i++)		tmp[i] = sAmount[len - i - 1];	memset(sAmount,0,sizeof(sAmount));	sAmount[0] = tmp[0];	sAmount[1] = tmp[1];	sAmount[2] = '.';	for(i = 3,j = 0,k = 2;j <= len ; j++)	{		if( j%4 == 3)		{			sAmount[i++] = ',';		}		else		{			sAmount[i++] = tmp[k++];		}	}	memset(tmp,0,sizeof(tmp));	len = strlen(sAmount);	for( i = 0;i < len;i++)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -