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

📄 pubcms.c

📁 一整套完整的银行卡系统源代码
💻 C
字号:
/******************************************************* **   源码文件名称 : PubCms.c **   功能描述     : 卡的公共函数 **   所属子系统   : 卡管理 **   当前文件版本 : 4.0.0.0 **   作        者 : Feng **   版本创建日期 : 2004/09/23 **   修改记录     : **   修改人       修改日期     修改位置*******************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include "code.h"#include "attrdef.h"#include "pubcom.h"#include "cmscode.h"/******************************************************* **	  函数名称:cmsDelDelimiter **   功能描述:删除字符串中的间隔符号, 间隔符号指定 **   输入参数: **   			pcStrBuf	----	字符串 **				cDelim		----	间隔符 **   输出参数: **   			pcStrBuf	----	字符串 **   输出结果:void*******************************************************/int cmsDelDelimiter( pcStrBuf, cDelim )char *pcStrBuf;char cDelim;{	char	*pcPos1;		/* 字符串指针 临时	*/	char	*pcPos2;		/* 字符串指针 过渡	*/	char	*pcPos3;		/* 字符串指针 过渡	*/	/* 将临时指针指向输入字符串	*/	pcPos1 = pcStrBuf;	pcPos3 = pcStrBuf;	/* 判断字符串是否结束 进行循环 */	while ( *pcPos1 != '\0' )	{		/* 判断字符是否为指定的间隔符号 */		if( *pcPos1 == cDelim )		{			/* 将过渡指针指向间隔符号后的位置 */			pcPos2 = pcPos1;			while( *pcPos2 != '\0' ) 				*pcPos2++ = *(pcPos2+1);			pcPos1 = pcPos3;		}		else			pcPos1++;		}	return SUCCESS;}/******************************************************* **	  函数名称:cmsStr2Dbl **   功能描述:将类型为char的字符串转换为类型为double的数值 **   			字符串可以无结束符 **   输入参数: **   			pcStrBuf	----	数字字符串 **   			iBufLen		----	字符串长度 **   			iDotLen		----	小数位数 **   输出参数: **   			pdDblBuf	----	双精度数值 **   输出结果:int **   			0			----	成功 **   			-1			----	失败*******************************************************/int	cmsStr2Dbl( pcStrBuf, iBufLen, iDotLen, pdDblBuf )char	*	pcStrBuf;int			iBufLen;int			iDotLen;double	*	pdDblBuf;{	char	acStrBuf[ PACKBUF_LEN ];		/* 临时字符串变量 */	int		iNum;							/* 计数器	*/	/* 初始化临时变量 */	memset ( acStrBuf, 0x00, sizeof( acStrBuf ) );	iNum = 0;	/* 检查输入数据是否合法 */	if ( ( strlen ( pcStrBuf ) < iBufLen )							\		|| ( strlen ( pcStrBuf ) < iDotLen )						\		|| ( iDotLen > iBufLen ) )	{		strcpy ( g_acRspCode, "CMS108" );		pubCrtRspInfo( pcStrBuf, iBufLen, iDotLen );		/*		sprintf( g_acRspMsg, "数据非法[%s]长度[%d]小数[%d]",	\				pcStrBuf, iBufLen, iDotLen );		*/		ERRLOG		return FAILED;	}	/* 在字符串中增加小数点 */	for( iNum = 0; iNum < iBufLen + 1; iNum++ )	{		if( iNum == ( iBufLen - iDotLen ) )			acStrBuf[ iNum ] = '.' ;		else			acStrBuf[ iNum ] = *pcStrBuf++ ;	}	acStrBuf[ iNum ] = 0x00 ;	/* 转换字符串为数值 */	*pdDblBuf = atof ( acStrBuf );	return SUCCESS;}/******************************************************* **	  函数名称:cmsStr2Flt **   功能描述:将类型为char的字符串转换为类型为float的数值 **   			字符串可以无结束符 **   输入参数: **   			pcStrBuf	----	数字字符串 **   			iBufLen		----	字符串长度 **   			iDotLen		----	小数位数 **   输出参数: **   			pfFltBuf	----	浮点数数值 **   输出结果:int **   			0			----	成功 **   			-1			----	失败*******************************************************/int	cmsStr2Flt( pcStrBuf, iBufLen, iDotLen, pfFltBuf )char	*	pcStrBuf;int			iBufLen;int			iDotLen;double	*	pfFltBuf;{	char	acStrBuf[ PACKBUF_LEN ];		/* 临时字符串变量 */	int		iNum;							/* 计数器	*/	/* 初始化临时变量 */	memset ( acStrBuf, 0x00, sizeof( acStrBuf ) );	iNum = 0;	/* 检查输入数据是否合法 */	if ( ( strlen ( pcStrBuf ) < iBufLen )							\		|| ( strlen ( pcStrBuf ) < iDotLen )						\		|| ( iDotLen > iBufLen ) )	{		strcpy ( g_acRspCode, "CMS108" );		pubCrtRspInfo( pcStrBuf, iBufLen, iDotLen );		/*		sprintf( g_acRspMsg, "数据非法[%s]长度[%d]小数[%d]",	\				pcStrBuf, iBufLen, iDotLen );		*/		ERRLOG		return FAILED;	}	/* 在字符串中增加小数点 */	for( iNum = 0; iNum < iBufLen + 1; iNum++ )	{		if( iNum == ( iBufLen - iDotLen ) )			acStrBuf[ iNum ] = '.' ;		else			acStrBuf[ iNum ] = *pcStrBuf++ ;	}	acStrBuf[ iNum ] = 0x00 ;	/* 转换字符串为数值 */	*pfFltBuf = atof ( acStrBuf );	return SUCCESS;}/******************************************************* **	  函数名称:cmsDbl2Str **   功能描述:将类型为double的数值转换为类型为char的字符串 **   			字符串可以无结束符 **   输入参数: **   			dDblBuf		----	双精度数值 **   			iDotLen		----	小数位数 **   			iBufLen		----	字符串长度 **   			iSign		----	小数位数 **   								0:无符号 **   								1:加符号 **   输出参数: **   			pcStrBuf	----	数字字符串 **   输出结果:int **   			0			----	成功 **   			-1			----	失败*******************************************************/int	cmsDbl2Str( dDblBuf, iDotLen, iBufLen, iSign, pcStrBuf )double		dDblBuf;int			iDotLen;int			iBufLen;int			iSign;char	*	pcStrBuf;{	char	acStrBuf[ PACKBUF_LEN ];		/* 临时字符串变量	*/	char	acStrTmp[ PACKBUF_LEN ];		/* 临时字符串变量2	*/	char	acStrStore[ PACKBUF_LEN ];		/* 临时字符串变量3	*/	char	acFmt[ FMTJST_LEN + 1 ];		/* 格式串			*/	char	*pcStr;							/* 临时字符串指针	*/	double	dDblTmp;						/* 临时双精度变量	*/	/* 初始化临时变量 */	memset ( acStrBuf,	 0x00, sizeof( acStrBuf ) );	memset ( acStrTmp,	 0x00, sizeof( acStrTmp ) );	memset ( acStrStore, 0x00, sizeof( acStrStore ) );	/* 检查输入数据是否合法 */	if ( iDotLen > iBufLen )	{		strcpy ( g_acRspCode, "CMS109" );		pubCrtRspInfo( pcStrBuf, iBufLen, iDotLen );		/*		sprintf( g_acRspMsg, "数据非法长度[%d]小数[%d]", iBufLen, iDotLen );		*/		ERRLOG		return FAILED;	}	/* 对双精度数值进行截位,保留约定小数位 */	dDblTmp = dDblBuf;	cmsDblTrunc( &dDblTmp, iDotLen );	/* 组织格式串 */	sprintf( acFmt, "%%#0%d.%df", iBufLen + 2, iDotLen );	sprintf( acStrBuf, acFmt, dDblTmp );	strcpy ( acStrTmp, &acStrBuf[1] );	/* 有标志位转换 */	if ( iSign != 0 )	{		strcpy ( acStrStore, acStrTmp );		pcStr = strtok( acStrStore, "." );		if ( strlen( pcStr ) > ( iBufLen - iDotLen - 1 ) )			memcpy ( &acStrBuf[1],									\				&acStrTmp[ strlen( pcStr ) - iBufLen + iDotLen + 1 ],\			    iBufLen - iDotLen );		else			strcpy ( &acStrBuf[1], pcStr );		pcStr = strtok( NULL, "." );		memcpy ( &acStrBuf[ iBufLen - iDotLen ], pcStr, iDotLen );		if ( dDblBuf < 0.00 )			acStrBuf[ 0 ] = '-';	}	/* 无符号位转换 */	else	{		strcpy ( acStrStore, acStrTmp );		pcStr = strtok( acStrStore, "." );		if ( strlen( pcStr ) > ( iBufLen - iDotLen ) )			memcpy ( acStrBuf,										\				&acStrTmp[ strlen( pcStr ) - iBufLen + iDotLen ],	\			    iBufLen - iDotLen );		else			strcpy ( acStrBuf, pcStr );		pcStr = strtok( NULL, "." );		memcpy ( &acStrBuf[ iBufLen - iDotLen ], pcStr, iDotLen );	}	/* 赋值到输出参数 */	memcpy ( pcStrBuf, acStrBuf, iBufLen );	return SUCCESS;}/******************************************************* **	  函数名称:cmsDblTrunc **   功能描述:对双精度数值进行截位,保留约定小数位 **   输入参数: **   			pdDblBuf	----	双精度数值 **   			iDotLen		----	小数位数 **   								负数表示从小数点向前截 **   输出参数: **   			pdDblBuf	----	双精度数值 **   输出结果:int **   			0			----	成功 **   			-1			----	失败*******************************************************/int cmsDblTrunc( pdDblBuf, iDotLen )double	*	pdDblBuf;int			iDotLen;{	char	acStrBuf[ PACKBUF_LEN ];		/* 临时字符串变量	*/	char	acFmt[ FMTJST_LEN + 1 ];		/* 格式串			*/	double	dDblTmp;						/* 临时双精度变量	*/	int		iNum;							/* 计数器 整数位数	*/	int		iBufLen;						/* 长度				*/	/* 初始化临时变量 */	memset ( acStrBuf,	 0x00, sizeof( acStrBuf ) );	/* 组织格式串 */	sprintf( acFmt, "%%.%df", iDotLen + 1 );	sprintf( acStrBuf, acFmt, *pdDblBuf );	/* 小数偏移调整 */	iBufLen = strlen ( acStrBuf );	for( iNum = 0; ( iNum < iBufLen ) && ( acStrBuf[ iNum ] != '.');\					iNum ++ );	/* 将字符串尾部进行处理 */	if ( iDotLen >= 0 )		memset ( &acStrBuf[ iNum + iDotLen + 1 ], 0x00, 			\		    PACKBUF_LEN - ( iNum + iDotLen + 2 ) );	else	{		memset ( &acStrBuf[ iNum + iDotLen ], '0', iDotLen * ( -1 ) );		memset ( &acStrBuf[ iNum ], 0x00, PACKBUF_LEN - iNum + 1 );	}	/* 赋值到输出参数 */	dDblTmp = atof ( acStrBuf );	*pdDblBuf = dDblTmp;	return SUCCESS;}/******************************************************* **	  函数名称:cmsAtoI **   功能描述:将类型为char的字符串转换为类型为int的数值 **   			字符串可以无结束符 **   输入参数: **   			pcStrBuf	----	字符串 **   			iBufLen		----	字符串长度 **   输出参数: **   			piIntBuf	----	整数数值 **   输出结果:int **   			>=0			----	成功=输出参数 **   			-1			----	失败*******************************************************/int	cmsAtoI( pcStrBuf, iBufLen, piIntBuf )char	*	pcStrBuf;int			iBufLen;int		*	piIntBuf;{	char	acStrBuf[ PACKBUF_LEN ];		/* 临时字符串变量 */	/* 初始化临时变量 */	memset ( acStrBuf, 0x00, sizeof( acStrBuf ) );	/* 转换字符串 */	if ( iBufLen > 1 )		memcpy ( acStrBuf, pcStrBuf, iBufLen );	else	{		acStrBuf[ 0 ] = *pcStrBuf;			memcpy ( acStrBuf + 1, 0x00, sizeof( acStrBuf ) - 1 );	}	/* 赋值到输出参数 */	*piIntBuf = atoi( acStrBuf );	return( *piIntBuf );}/******************************************************* **	  函数名称:cmsAtoL **   功能描述:将类型为char的字符串转换为类型为long的数值 **   			字符串可以无结束符 **   输入参数: **   			pcStrBuf	----	字符串 **   			iBufLen		----	字符串长度 **   输出参数: **   			piIntBuf	----	整数数值 **   输出结果:int **   			>=0			----	成功=输出参数 **   			-1			----	失败*******************************************************/int	cmsAtoL( pcStrBuf, iBufLen, piIntBuf )char	*	pcStrBuf;int			iBufLen;int		*	piIntBuf;{	char	acStrBuf[ PACKBUF_LEN ];		/* 临时字符串变量 */	/* 初始化临时变量 */	memset ( acStrBuf, 0x00, sizeof( acStrBuf ) );	/* 转换字符串 */	if ( iBufLen > 1 )		memcpy ( acStrBuf, pcStrBuf, iBufLen );	else	{		acStrBuf[ 0 ] = *pcStrBuf;			memcpy ( acStrBuf + 1, 0x00, sizeof( acStrBuf ) - 1 );	}	/* 赋值到输出参数 */	*piIntBuf = atol( acStrBuf );	return( *piIntBuf );}/******************************************************* **	  函数名称:cmsGenPreAuthCode **   功能描述:生成预授权码 **   输入参数: **   输出参数: **   			pcAuthCode	----	授权码 **   输出结果:int **   			=0			----	成功 **   			-1			----	失败*******************************************************/int	cmsgenPreAuthCode( pcAuthCode )char	*	pcAuthCode;{	time_t	iTime = 0;	time_t	iRetTime = 0;	char	acBuf[ FMTJST_LEN + 1 ]; 	memset ( acBuf, 0x00, sizeof( acBuf ) );	iRetTime = time ( &iTime ); 	seed48 ( ( unsigned short * ) &iRetTime );	sprintf ( acBuf , "%d" , lrand48() );	strncpy ( pcAuthCode , acBuf, 6 ); 	return SUCCESS;}

⌨️ 快捷键说明

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