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

📄 cmstrack.sqc

📁 一整套完整的银行卡系统源代码
💻 SQC
📖 第 1 页 / 共 2 页
字号:
char					*	pcTrack2;		/* 卡磁道二		*/char					*	pcTrack3;		/* 卡磁道三		*/{	/* 定义 局部变量 */	int					iRtn;					/* 函数返回值		*/	int					iLen;					/* 长度				*/	int					iFlag;					/* 标志				*/	int					iNum, iNum1, iNum2, iNum3, iNum4;	char  				acBuf[CONDITION_LEN];	/* 临时存储区		*/	char  				acBuf1[CONDITION_LEN];	/* 临时存储区		*/	sprintf( g_acTrcMsg, "cmsGenCardCovInfo begin " );	TRCLOG2	/* 获取数据库中配置的卡面信息 */	memset( acBuf, 0, sizeof( acBuf ));	memset( acBuf1, 0, sizeof( acBuf1 ));	strcpy( acBuf, pcCardNo+7 );	strcat( acBuf, " " );	strcat( acBuf, pcVouNo );	strcat( acBuf, " " );	strncpy( acBuf1,  pcValidDate , 4 );	acBuf1[ 4 ] ='\0';	strcat( acBuf, acBuf1 );	strcat( acBuf, "/" );	memset( acBuf1, 0, sizeof( acBuf1 ));	strncpy( acBuf1,  pcValidDate+4 , 2 );	acBuf1[ 2 ] ='\0';	strcat( acBuf, acBuf1 );	strcpy( pcCardCover, acBuf);	sprintf( g_acTrcMsg, "cmsGenCardCovInfo end " );	TRCLOG2	return SUCCESS;}/******************************************************* **	  函数名称:cmsGenCardTrack2Info **   功能描述:按制卡格式生成卡的二磁道信息(哈尔滨) **   输入参数: **   			pcCardNo					----	卡号 **   			pcBankFg					----	银行标志 **   			pcCustInf					----	客户信息 **   			pcValidDate					----	有效期 **   			pcVouNo						----	凭证号码 **   输出参数: **   			pcCardCover					----	卡面 **   			pcTrack1					----	磁道一 **   			pcTrack2					----	磁道二 **   			pcTrack3					----	磁道三 **   返回结果:int **   			0				----	成功 **   			-1				----	失败*******************************************************/int	cmsGenCardTrack2Info( pcCardNo, pcBankFg, pcCustInf, pcValidDate, pcVouNo, pcCardCover, pcTrack1, pcTrack2, pcTrack3  )char					*	pcCardNo;			/* 卡号	*/char					*	pcBankFg;			/* 银行标志	*/char					*	pcCustInf;			/* 客户信息 */char					*	pcValidDate;		/* 有效期 */char					*	pcVouNo;			/* 凭证号码 */char					*	pcCardCover;		/* 卡面			*/char					*	pcTrack1;		/* 卡磁道一		*/char					*	pcTrack2;		/* 卡磁道二		*/char					*	pcTrack3;		/* 卡磁道三		*/{	/* 定义 局部变量 */	int					iRtn;					/* 函数返回值		*/	int					iLen;					/* 长度				*/	int					iFlag;					/* 标志				*/	int					iNum, iNum1, iNum2, iNum3, iNum4;	char  				acBuf[CONDITION_LEN];	/* 临时存储区		*/	char  				acBuf1[CONDITION_LEN];	/* 临时存储区		*/	char				acPinparm[ 6 + 1 ];		/* 写磁控制码		*/	char				acEncryPinparm[ 16 + 1 ];	/* 密文 	*/	sprintf( g_acTrcMsg, "cmsGenCardTrack2Info begin " );	TRCLOG2	memset( acPinparm, 0, sizeof( acPinparm ));	memset( acEncryPinparm, 0, sizeof( acEncryPinparm ));	/* 补充二磁道信息 */	memset( acBuf, 0, sizeof( acBuf ));	strcpy( acBuf, pcTrack2 );	iRtn = cmsApiGenCardPinparm( pcCardNo, acPinparm, acEncryPinparm );	if ( iRtn )	{		ERRLOG		return FAILED;	}	memcpy( acBuf+31, acPinparm + strlen( acPinparm ) -3 , 3  );	strcpy( pcTrack2, acBuf);	sprintf( g_acTrcMsg, "cmsGenCardTrack2Info end " );	TRCLOG2	return SUCCESS;}/******************************************************* **	  函数名称:cmsGenCardTrack3Info **   功能描述:按制卡格式生成卡的三磁道信息(哈尔滨) **   输入参数: **   			pcCardNo					----	卡号 **   			pcBankFg					----	银行标志 **   			pcCustInf					----	客户信息 **   			pcValidDate					----	有效期 **   			pcVouNo						----	凭证号码 **   输出参数: **   			pcCardCover					----	卡面 **   			pcTrack1					----	磁道一 **   			pcTrack2					----	磁道二 **   			pcTrack3					----	磁道三 **   返回结果:int **   			0				----	成功 **   			-1				----	失败*******************************************************/int	cmsGenCardTrack3Info( pcCardNo, pcBankFg, pcCustInf, pcValidDate, pcVouNo, pcCardCover, pcTrack1, pcTrack2, pcTrack3  )char					*	pcCardNo;			/* 卡号	*/char					*	pcBankFg;			/* 银行标志	*/char					*	pcCustInf;			/* 客户信息 */char					*	pcValidDate;		/* 有效期 */char					*	pcVouNo;			/* 凭证号码 */char					*	pcCardCover;		/* 卡面			*/char					*	pcTrack1;		/* 卡磁道一		*/char					*	pcTrack2;		/* 卡磁道二		*/char					*	pcTrack3;		/* 卡磁道三		*/{	/* 定义 局部变量 */	int			iRtn;					/* 函数返回值		*/	int			iLen;					/* 长度				*/	int			iFlag;					/* 标志				*/	int			iNum, iNum1, iNum2, iNum3, iNum4;	char  		acBuf[CONDITION_LEN];	/* 临时存储区		*/	char  		acBuf1[CONDITION_LEN];	/* 临时存储区		*/	char		acPinparm[ 6 + 1 ];		/* 写磁控制码		*/	char		acEncryPinparm[ 16 + 1 ];	/* 密文 	*/	char		acVouNos[ VOUNO_LEN + 1 ];	/* 凭证号码+校验 	*/	struct cmscardinfo		stCmsCardInfo;			/* 卡片信息表 */	sprintf( g_acTrcMsg, "cmsGenCardTrack3Info begin " );	TRCLOG2	memset( acPinparm, 0, sizeof( acPinparm ));	memset( acEncryPinparm, 0, sizeof( acEncryPinparm ));	memset( acVouNos, 0, sizeof( acVouNos ));	memset( &stCmsCardInfo,	0x00,	sizeof( struct cmscardinfo ) );	/* 补充三磁道信息 */	memset( acBuf, 0, sizeof( acBuf ));	strcpy( acBuf, pcTrack3 );	iRtn = cmsApiGenCardPinparm( pcCardNo, acPinparm, acEncryPinparm );	if ( iRtn )	{		ERRLOG		return FAILED;	}	memcpy( acBuf+43, acPinparm  , 6  );	memcpy( acBuf+62, pcCardNo + strlen( pcCardNo ) - 11 , 11  );	strcpy( acVouNos, pcVouNo );	iRtn = cmsGenCardVerifyBit ( acVouNos );	if ( iRtn )	{		ERRLOG		return FAILED;	}	memcpy( acBuf+74, acVouNos, strlen( acVouNos )  );	strcpy( pcTrack3, acBuf);	strcpy( stCmsCardInfo.cardno,	pcCardNo );	iRtn = pubReadCmscardinfo( &stCmsCardInfo );	if ( iRtn )	{		ERRLOG		return FAILED;	}	strcpy( stCmsCardInfo.cardoffset,	acEncryPinparm );	iRtn = pubModiCmscardinfo( &stCmsCardInfo );	if ( iRtn )	{		ERRLOG		return FAILED;	}	sprintf( g_acTrcMsg, "cmsGenCardTrack3Info end " );	TRCLOG2	return SUCCESS;}/******************************************************* **	  函数名称:cmsCardVerify **   功能描述:校验CVN **   输入参数: **   			pcCardNo					----	卡号 **   			pcTrack2					----	磁道二 **   			pcTrack3					----	磁道三 **   输出参数: **   返回结果:int **   			0				----	成功 **   			-1				----	失败*******************************************************/int cmsCardVerify( pcCardNo, pcTrack2 ,pcTrack3 )char	*pcCardNo;char	*pcTrack2;char	*pcTrack3;{	int					iRtn;	char 				vakey[5];                                 	char 				vacdsj[36];                               	char  				acBuf1[CONDITION_LEN];	/* 临时存储区		*/	char  				acBuf2[CONDITION_LEN];	/* 临时存储区		*/	memset(vakey,0,sizeof(vakey));                 	memset(vacdsj,0,sizeof(vacdsj));               	if (strlen(pcTrack2) == 0)	{		strcpy( g_acRspCode, "CMS222" );		pubCrtRspInfo( );		ERRLOG		return FAILED;	}	/* 表示需要重新写磁道 */	if ((!strcmp(pcTrack2+17, "=0000201121234567890")) ||	    (!memcmp(pcTrack2, "6603601", 7)))	{		return 1;	}	else 	{		/* 计算密码校验值 */		memset( acBuf1, 0, sizeof( acBuf1 ));		memset( acBuf2, 0, sizeof( acBuf2 ));		strncpy( acBuf1, pcTrack2,17);		memcpy( acBuf1 + strlen( acBuf1 ), pcTrack2+18, 4);		memcpy( acBuf1 + strlen( acBuf1 ), pcTrack2+22, 3);		iRtn =  cmsGenCVN( acBuf1 , "678012DEF345ABC9", "DEF01234ABC56798", acBuf2);		if ( iRtn )		{			strcpy( g_acRspCode , "CMS1D1" );			pubCrtRspInfo( );			ERRLOG			return FAILED;		}			sprintf(vacdsj,"%s=0000201%s234567890",pcCardNo,acBuf2); 			sprintf(g_acTrcMsg, "vacdsj:%s", vacdsj);		TRCLOG2		if (strcmp(vacdsj,pcTrack2))		{			strcpy( g_acRspCode , "CMS1D1" );			pubCrtRspInfo( );			ERRLOG			return FAILED;		}					else return 0;                               	}	return 0;}/******************************************************* **	  函数名称:cmsCardVerifyHRB **   功能描述:校验写磁控制码 **   输入参数: **   			pcCardNo					----	卡号 **   			pcTrack2					----	磁道二 **   			pcTrack3					----	磁道三 **   输出参数: **   返回结果:int **   			0				----	成功 **   			-1				----	失败*******************************************************/int cmsCardVerifyHRB( pcCardNo, pcTrack2 ,pcTrack3 )char	*pcCardNo;char	*pcTrack2;char	*pcTrack3;{	int			iRtn;	char 		acPinparm1[4];                                 	char 		acPinparm2[7];                                 	char		acEncryPinparm[ 16 + 1 ];	/* 密文 	*/	char  		acBuf1[CONDITION_LEN];	/* 临时存储区		*/	char  		acBuf2[CONDITION_LEN];	/* 临时存储区		*/	struct cmscardinfo		stCmsCardInfo;			/* 卡片信息表 */	memset( acPinparm1,0,sizeof( acPinparm1 ));                 	memset( acPinparm2,0,sizeof( acPinparm2 ));               	memset( acEncryPinparm, 0, sizeof( acEncryPinparm ));	memset( &stCmsCardInfo,	0x00,	sizeof( struct cmscardinfo ) );	if (strlen(pcTrack2) == 0)	{		strcpy( g_acRspCode, "CMS222" );		pubCrtRspInfo( );		ERRLOG		return FAILED;	}		if (strlen(pcTrack3) == 0)	{		strcpy( g_acRspCode, "CMS223" );		pubCrtRspInfo( );		ERRLOG		return FAILED;	}	memcpy( acPinparm1, pcTrack2+ 31, 3 );	memcpy( acPinparm2, pcTrack3+ 43, 6 );	if ( memcmp( acPinparm1, acPinparm2 + 3 , 3 ) )	{		strcpy( g_acRspCode, "CMS1D1" );		pubCrtRspInfo( );		ERRLOG		return FAILED;	}	PIN_Encrypt( acPinparm2, pcCardNo, acEncryPinparm );	strcpy( stCmsCardInfo.cardno,	pcCardNo );	iRtn = pubReadCmscardinfo( &stCmsCardInfo );	if ( iRtn )	{		ERRLOG		return FAILED;	}	if ( strcmp( stCmsCardInfo.cardoffset, acEncryPinparm ) )	{		strcpy( g_acRspCode, "CMS1D1" );		pubCrtRspInfo( );		ERRLOG		return FAILED;	}	return SUCCESS;}/************************************************************************ Function Name: EncryptPkg Summary: encrypt a package using a 8 byte key Interface:        Input paramter - char key[9];                         char in[]; unencrypted bytes                        int  size; the lenth you want to encrypt,it must                                           be some times of 8.       Output paramter - char out[]; encrypted bytes***********************************************************************int EncryptPkg( char * in,char * out,int size){   int i = 0, j = 0 ;   char key_bit[65];   char	key[8+1];   char	out_tmp[8+1];   char	in_tmp[8+1];	memset( out, 0x0, 9 );	sprintf(g_acTrcMsg, "in:%s", in);	TRCLOG2	for( i = 0 ; i < size ; i ++ )	{	j = i % 8;	out[j] = out[j] + in[i]  - 0x30 ;	}	for( i = 0 ; i < 8 ; i ++ )	{	if( out[i] > 0x09 ) out[i] = out[i] - 0x09;	out[i] = out[i] + 0x30 ;	}   return 0;}*/

⌨️ 快捷键说明

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