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

📄 cmscheck.sqc

📁 一整套完整的银行卡系统源代码
💻 SQC
📖 第 1 页 / 共 5 页
字号:
 **   返回结果:int **   			0				----	成功(是) **   			-1				----	失败*******************************************************/int	cmsApiChkAcctStatusIsOK( pstCmsAcctM )struct cmsacctm			*	pstCmsAcctM;		/* 卡账户对照表		*/{	/* 定义 局部变量 */	int					iRtn;					/* 函数返回值		*/	sprintf( g_acTrcMsg, "cmsApiChkAcctStatusIsOK begin " );	TRCLOG2	/* 检查卡内帐户状态是否正常 */	/* 不是正常 */	if ( pstCmsAcctM->status[ BIT1_LEN ] != NORMAL_STS )	{		strcpy( g_acRspCode, "CMS1A8" );		pubCrtRspInfo( pstCmsAcctM->cardno, pstCmsAcctM->acctseqno );		ERRLOG		return FAILED;	}	sprintf( g_acTrcMsg, "cmsApiChkAcctStatusIsOK end " );	TRCLOG2	return SUCCESS;}/******************************************************* **	  函数名称:cmsApiChkIsNameCard **   中文名称:检查卡号是否为记名卡 **   功能描述:已知某卡卡片信息,判断卡是否是记名卡 **   输入参数: **   			pstCmsCardInfo	----	卡片信息表 **   输出参数:无 **   返回结果:int **   			0				----	成功(是) **   			-1				----	失败*******************************************************/int	cmsApiChkIsNameCard( pstCmsCardInfo )struct	cmscardinfo		*	pstCmsCardInfo;		/* 卡片信息表		*/{	/* 定义 局部变量 */	int					iRtn;					/* 函数返回值		*/	sprintf( g_acTrcMsg, "cmsApiChkIsNameCard begin " );	TRCLOG2	/* 检查卡是否为记名卡 */	/* 不是记名卡 */	if ( pstCmsCardInfo->markflg[ BIT1_LEN ] != REGNAMECARD )	{		strcpy( g_acRspCode, "CMS1B3" );		pubCrtRspInfo( pstCmsCardInfo->cardno );		ERRLOG		return FAILED;	}	sprintf( g_acTrcMsg, "cmsApiChkIsNameCard end " );	TRCLOG2	return SUCCESS;}/******************************************************* **	  函数名称:cmsApiChkIsUnnameCard **   中文名称:检查卡号是否为非记名卡 **   功能描述:已知某卡卡片信息,判断卡是否是非记名卡 **   输入参数: **   			pstCmsCardInfo	----	卡片信息表 **   输出参数:无 **   返回结果:int **   			0				----	成功(是) **   			-1				----	失败*******************************************************/int	cmsApiChkIsUnnameCard( pstCmsCardInfo )struct	cmscardinfo		*	pstCmsCardInfo;		/* 卡片信息表		*/{	/* 定义 局部变量 */	int					iRtn;					/* 函数返回值		*/	sprintf( g_acTrcMsg, "cmsApiChkIsUnnameCard begin " );	TRCLOG2	/* 检查卡是否为记名卡 */	/* 不是非记名卡 */	if ( pstCmsCardInfo->markflg[ BIT1_LEN ] == REGNAMECARD )	{		strcpy( g_acRspCode, "CMS1C4" );		pubCrtRspInfo( pstCmsCardInfo->cardno );		ERRLOG		return FAILED;	}	sprintf( g_acTrcMsg, "cmsApiChkIsUnnameCard end " );	TRCLOG2	return SUCCESS;}/******************************************************* **	  函数名称:cmsApiChkCardKindIsMainCard **   中文名称:检查卡片种类是否为主卡卡片种类 **   功能描述:已知某种卡片种类,判断卡片种类是否为主卡卡片种类 **   输入参数: **   			pstCmsCardKind	----	卡片种类表 **   输出参数:无 **   返回结果:int **   			0				----	成功(是) **   			-1				----	失败*******************************************************/int	cmsApiChkCardKindIsMainCard( pstCmsCardKind )struct	cmscardkind		*	pstCmsCardKind;		/* 卡片种类表		*/{	/* 定义 局部变量 */	int					iRtn;					/* 函数返回值		*/	sprintf( g_acTrcMsg, "cmsApiChkCardKindIsMainCard begin " );	TRCLOG2	/* 检查卡片种类是否为主卡卡片种类 */	if ( pstCmsCardKind->cardflg[ BIT1_LEN ] != ALL_CARD)	{		if ( pstCmsCardKind->cardflg[ BIT1_LEN ] != MAIN_CARD )		{			strcpy( g_acRspCode, "CMS1B4" );			pubCrtRspInfo( pstCmsCardKind->cardkind );			ERRLOG			return FAILED;		}	}	sprintf( g_acTrcMsg, "cmsApiChkCardKindIsMainCard end " );	TRCLOG2	return SUCCESS;}/******************************************************* **	  函数名称:cmsApiChkCardKindIsSubMainCard **   中文名称:检查卡片种类是否为附卡卡片种类 **   功能描述:已知某种卡片种类,判断卡片种类是否为附卡卡片种类 **   输入参数: **   			pstCmsCardKind	----	卡片种类表 **   输出参数:无 **   返回结果:int **   			0				----	成功(是) **   			-1				----	失败*******************************************************/int	cmsApiChkCardKindIsSubMainCard( pstCmsCardKind )struct	cmscardkind		*	pstCmsCardKind;		/* 卡片种类表		*/{	/* 定义 局部变量 */	int					iRtn;					/* 函数返回值		*/	sprintf( g_acTrcMsg, "cmsApiChkCardKindIsSubMainCard begin " );	TRCLOG2	/* 检查卡片种类是否为附卡卡片种类 */	if ( pstCmsCardKind->cardflg[ BIT1_LEN ] != ALL_CARD)	{		if ( pstCmsCardKind->cardflg[ BIT1_LEN ] != SUBMAIN_CARD )		{			strcpy( g_acRspCode, "CMS1B5" );			pubCrtRspInfo( pstCmsCardKind->cardkind );			ERRLOG			return FAILED;		}	}	sprintf( g_acTrcMsg, "cmsApiChkCardKindIsSubMainCard end " );	TRCLOG2	return SUCCESS;}/******************************************************* **	  函数名称:cmsApiChkCardNormal **   中文名称:检查卡状态和密码 **   功能描述:检查卡状态和密码 **   输入参数: **   			pstPubcom		----	公共数据 **   			pcCardNo		----	卡号 **				pcPasswd		----	密码 **				pcTrack2		----	二磁道 **				pcTrack3		----	三磁道 **				dAmount			----	发生额 **				pcCcy			----	币种 **				pcTranType		----	交易类型 **   									"001":本行借记卡开主帐户 **   									"002":本行借记卡正常销户 **   									"003":本行借记卡存款 **   									"004":本行借记卡取款 **   									"005":本行借记卡转本行借记卡 **   									"006":本行借记卡消费 **   									"007":本行借记卡退货 **   									"008":圈存 **   									"009":圈提 **   									"010":本行借记卡贷款发放 **   									"011":本行借记卡贷款还款 **   									"012":中间业务 **   									"013":本行借记卡预授权 **   									"014":本行借记卡预授权完成 **   									"015":本行借记卡修改密码 **   									"016":本行借记卡查询 **   									"017":撤消 **   									"018":冲正 **   									"019":撤消冲正 **   									"020":本行借记卡存款确认 **   									"021":本行借记卡挂失 **   									"022":本行贷记卡预借现金 **   									"023":本行借记卡转银联卡 **   									"024":银联卡转本行借记卡 **   									"025":本行借记卡开多帐户 **   									"026":本行借记卡保号换卡 **   									"027":本行借记卡申请副卡 **   									"028":本行借记卡挂失销户 **   									"029":本行借记卡转本行贷记卡 **   									"030":本行贷记卡转本行借记卡 **   									"031":本行贷记卡转本行贷记卡 **   									"032":银联卡转银联卡 **   									"033":本行借记卡自助缴费 **   									"034":本行贷记卡存款 **   									"035":本行贷记卡消费 **   									"036":银联卡存款 **   									"037":银联卡取款 **   									"038":本行贷记卡预授权 **   									"039":本行贷记卡预授权完成 **   									"040":本行贷记卡修改密码 **   									"041":本行贷记卡查询 **   									"042":本行贷记卡存款确认 **   									"043":本行贷记卡挂失 **   									"097":转出(中间业务代收业务赋此项) **   									"098":转入(中间业务代付业务赋此项) **   									"099":其他(中间业务和外围做其他业务时赋此项) **				pcTranFlag		----	交易标志 **										"0":正常 **										"1":抹账 **				pcChkPwdFlg		----	检查密码标志 **										"0":不检查 **										"1":检查 **				pcChkTrkFlg		----	检查磁道标志 **										"0":不检查 **										"1":检查 **				pcMid			----	商户代码 **				pcMctmcc		----	商户类型 **				pcMode			----	交易类型										"1":取款										"2":存款										"3":消费										"4":转出										"5":转入										"6":其他 **   输出参数:无 **   返回结果:int **   			0				----	成功(是) **   			-1				----	失败*******************************************************/int cmsApiChkCardNormal( pstPubcom, pcCardNo, pcPasswd, pcTrack2, pcTrack3, \		dAmount, pcCcy, pcTranType, pcTranFlag, pcChkPwdFlg, pcChkTrkFlg, \		pcMid, pcMctmcc, pcMode )PUBCOM		*	pstPubcom;char		*	pcCardNo;char		*	pcPasswd;char		*	pcTrack2;char		*	pcTrack3;double			dAmount;char		*	pcCcy;char		*	pcTranType;char		*	pcTranFlag;char		*	pcChkPwdFlg;char		*	pcChkTrkFlg;char		*	pcMid;char		*	pcMctmcc;char		*	pcMode;{	/*定义局部变量*/	struct	cmscardinfo			stCmsCardInfo;	/* 卡片信息表		*/	struct	cmscardkind			stCmsCardKind;	/* 卡片种类表		*/	struct	cmscardinitparam	stCmsCardInit;	/* 卡片初始化参数表	*/	char	acCardStat[ BIT21_LEN ][BIT11_LEN];	/* 卡状态检查标志	*/	char    acCheckFlag[ BIT8_LEN + 1 ];        /* 检查卡片种类标志 */	char    acMode[ FLAG_LEN + 1 ];	char    acTranFlag[ FLAG_LEN + 1 ];	int		iRtn;								/* 函数返回值		*/	int		iNumx;								/* 数组计数器		*/	int		iNumy;								/* 数组计数器		*/	int	i, ifound=0;	int (*nppfunc)( char *, char *, char * );	strcpy( g_acTrcMsg, "api卡正常检查处理开始.." );	TRCLOG2	sprintf( g_acTrcMsg, "卡号[%s]密码[%s]", pcCardNo, pcPasswd );	TRCLOG1	sprintf( g_acTrcMsg, "金额[%.2lf]币种[%s]", dAmount, pcCcy );	TRCLOG1	sprintf( g_acTrcMsg, "类型[%s]标志[%s]", pcTranType, pcTranFlag );	TRCLOG1	sprintf( g_acTrcMsg, "密码[%s]磁道[%s]", pcChkPwdFlg, pcChkTrkFlg );	TRCLOG1	sprintf( g_acTrcMsg, "Mid[%s] pcMode[%s]", pcMid, pcMode );	TRCLOG2	memset( acMode, 0x00, sizeof( acMode ) );	memset( acTranFlag, 0x00, sizeof( acTranFlag ) );	strcpy( acMode, pcMode );	strcpy( acTranFlag, pcTranFlag );	/* 初始化 */	memset( &stCmsCardInfo,	0x00,	sizeof( struct cmscardinfo ) );	memset( &stCmsCardKind,	0x00,	sizeof( struct cmscardkind ) );	memset( &stCmsCardInit,	0x00,	sizeof( struct cmscardinitparam ) );	memset( acCheckFlag,        0x00,   sizeof( acCheckFlag ) );	/* 获取卡片信息表 */	strcpy( stCmsCardInfo.cardno, pcCardNo );	iRtn = pubReadCmscardinfo( &stCmsCardInfo );	if ( iRtn )	{		if ( SQLCODE == SQLNOTFOUND )		{			strcpy(g_acRspCode,"CMS302");			pubCrtRspInfo( pcCardNo );		}		ERRLOG		return FAILED;	}	/* 获取卡片种类表 */	strcpy( stCmsCardKind.cardkind,	stCmsCardInfo.cardkind );	iRtn = pubReadCmscardkind( &stCmsCardKind );	if ( iRtn )	{		if( SQLCODE == SQLNOTFOUND )			sprintf( g_acRspMsg, "卡片种类[%s]不存在", stCmsCardInfo.cardkind );		ERRLOG		return FAILED;	}	/* 获取卡片初始化参数表 */	strcpy( stCmsCardInit.cardidkind,	stCmsCardKind.cardidkind );	iRtn = pubReadCmscardinitparam( &stCmsCardInit );	if ( iRtn )	{		if( SQLCODE == SQLNOTFOUND )			sprintf( g_acRspMsg, "卡片初始化参数[%s]不存在", stCmsCardInit.cardidkind );		ERRLOG		return FAILED;	}    /* 检查卡片种类(全部属性)API是否为启用标志、检查卡种交易类型 */ 	/* 检查业务发生地、是否是记名卡 */    acCheckFlag[ BIT1_LEN ] = CHECK_YES;        /* 检查启用标志         */    acCheckFlag[ BIT2_LEN ] = CHECK_YES;        /* 检查卡种交易类型     */    acCheckFlag[ BIT3_LEN ] = CHECK_YES;        /* 检查业务发生地       */    acCheckFlag[ BIT4_LEN ] = CHECK_NO;        	/* 不检查发卡对象 单/个	*/    acCheckFlag[ BIT5_LEN ] = CHECK_NO;         /* 不检查记名标志      	*/    acCheckFlag[ BIT6_LEN ] = CHECK_NO;         /* 不检查挂失标志       */	if ( !strcmp( pcTranType, LOGCONSUME )				|| !strcmp( pcTranType, LOGCONPREAUTH )				|| !strcmp( pcTranType, LOGRETURNGOODS )				|| !strcmp( pcTranType, LOGPREAUTH ) )		acCheckFlag[ BIT7_LEN ] = CHECK_YES;	else		acCheckFlag[ BIT7_LEN ] = CHECK_NO;    iRtn = cmsApiChkCardKind( &stCmsCardKind, acCheckFlag, pcTranType, 				pstPubcom->acChannelId, CZEROS, CZEROS, CZEROS, pcMid  );    if ( iRtn )    {        ERRLOG        return FAILED;    }	if ( pcTranFlag[ BIT1_LEN ] != FLAG_NORMAL )	{		return SUCCESS;	}	/* 检查卡片状态 */	switch ( stCmsCardInfo.crdsts[ BIT1_LEN ] )	{		/* 正常 */		case CARDOKSTS:			break;		/* 已销卡 */		case CARDCCSTS:			/* 卡已经销卡 */			strcpy( g_acRspCode, "CMS192" );			pubCrtRspInfo( stCmsCardInfo.cardno );			ERRLOG			return FAILED;			break;		/* 未制卡 */		case CARDKCSTS:			if ( stCmsCardInfo.cardstat[ BIT14_LEN ] != BIT14_CARDBHAPLY )			{				/* 卡未制卡 */				strcpy( g_acRspCode, "CMS193" );				pubCrtRspInfo( stCmsCardInfo.cardno );				ERRLOG				return FAILED;			}			break;		/* 未发卡 */		case CARDNGSTS:			if ( stCmsCardInfo.cardstat[ BIT14_LEN ] != BIT14_CARDBHAPLY )			{				/* 卡未发卡 */				strcpy( g_acRspCode, "CMS1D4" );				pubCrtRspInfo( stCmsCardInfo.cardno );				ERRLOG				return FAILED;			}			break;	}	/* 卡检查状态数组除首位外全置为不检查 */	for ( iNumx = 0; iNumx < BIT21_LEN; iNumx ++ )		for ( iNumy = 0; iNumy < BIT11_LEN; iNumy ++ )		{			if ( iNumy == 0 )				acCardStat[iNumx][iNumy] = CHECK_YES;			else				acCardStat[iNumx][iNumy] = CHECK_NO;		}	/* 按交易类型设置卡状态的检查acCardStat */	if ( !strcmp( pcTranType, LOGDEPOSIT ) 				/* 存款 */			|| !strcmp( pcTranType, LOGTRANSFERIN )		/* 转入 */			|| !strcmp( pcTranType, LOGOPENOTHACCT )	/* 开户 */			|| !strcmp( pcTranType, LOGAGENTDEPOSIT )	/* 代付 */			|| acMode[BIT1_LEN] == MODE_DEPOSIT 			|| acMode[BIT1_LEN] == MODE_TRANSFERIN )	{		acCardStat[ BIT2_LEN ] [ BIT2_LEN ] = CHECK_YES;		acCardStat[ BIT2_LEN ] [ BIT3_LEN ] = CHECK_YES;		acCardStat[ BIT3_LEN ] [ BIT2_LEN ] = CHECK_YES;		acCardStat[ BIT3_LEN ] [ BIT3_LEN ] = CHECK_YES;		acCardStat[ BIT5_LEN ] [ BIT2_LEN ] = CHECK_YES;		acCardStat[ BIT6_LEN ] [ BIT2_LEN ] = CHECK_YES;		acCardStat[ BIT7_LEN ] [ BIT2_LEN ] = CHECK_YES;		acCardStat[ BIT9_LEN ] [ BIT2_LEN ] = CHECK_YES;		acCardStat[ BIT12_LEN ] [ BIT2_LEN ] = CHECK_YES;		acCardStat[ BIT13_LEN ] [ BIT2_LEN ] = CHECK_YES;		acCardStat[ BIT14_LEN ] [ BIT2_LEN ] = CHECK_YES;		acCardStat[ BIT14_LEN ] [ BIT3_LEN ] = CHECK_YES;		acCardStat[ BIT14_LEN ] [ BIT4_LEN ] = CHECK_YES;		acCardStat[ BIT15_LEN ] [ BIT2_LEN ] = CHECK_YES;

⌨️ 快捷键说明

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