📄 pwdcheck.sqc
字号:
/******************************************************* ** 源码文件名称 : pwdcheck.SQC ** 所属子系统 : 卡管理 ** 功能描述 : 对卡密码处理和检查 ** 当前文件版本 : 4.0.0.0 ** 作 者 : UCCB ALex ** 版本创建日期 : 2004/09/17 ** 修改记录 : ** 修改人 修改日期 修改位置*******************************************************/#include "sysdefine.h"#include "code.h"#include "attrdef.h"#include "pubcom.h"#include "cmscode.h"#include "cmscardinfo.h"#include "cmscardkind.h"#include "cmstbsreginf.h"EXEC SQL INCLUDE sqlca;/******************************************************* ** 函数名称:cmsApiChkCardPwd ** 功能描述:检查卡密码 ** 输入参数: ** pstCardInfo --- 卡片信息表 ** pcCardPwd --- 卡密码 ** pcHappenPlace --- 业务发生地 ** 输出参数: ** ** 涉及库表: ** cmscardinfo --- 卡片信息表 ** 返回结果:int 0 成功 -1 失败 密码不正确 ** 作 者 : UCCB ALex ** 版本创建日期 : 2004/09/17 ** 修改记录 : ** 修改人 修改日期 修改位置*******************************************************/int cmsApiChkCardPwd( pstCardInfo, pcCardPwd, pcHappenPlace )struct cmscardinfo * pstCardInfo; /*卡片信息表*/char * pcCardPwd; /*卡密码 */char * pcHappenPlace; /*业务发生地 */{ struct cmscardkind stCardKind; int iRtn; sprintf( g_acTrcMsg, "cmsApiChkCardPwd begin " ); TRCLOG2 memset( &stCardKind, 0x00, sizeof( struct cmscardkind ) ); /* 从卡片信息表获取纪录并锁住纪录 */ pubStoVCmscardinfo( pstCardInfo ); EXEC SQL DECLARE Info_l_cur CURSOR FOR SELECT * FROM CMSCARDINFO WHERE cardno = :cmscardinfo_cardno FOR UPDATE; /* 定义游标出错 if ( SQLCODE ) { strcpy( g_acRspCode, "CMS110" ); pubCrtRspInfo( "cmscardinfo", SQLCODE ); ERRLOG return FAILED; } */ SQLOPENCUR(Info_l_cur,"Info_l_cur") /* 打开游表出错 */ if ( SQLCODE ) { strcpy( g_acRspCode, "CMS111" ); pubCrtRspInfo( "cmscardinfo", SQLCODE ); ERRLOG return FAILED; } EXEC SQL FETCH Info_l_cur INTO R_CMSCARDINFO ; /* 取游表出错 */ if ( SQLCODE && SQLCODE != SQLNOTFOUND ) { strcpy( g_acRspCode, "CMS112" ); pubCrtRspInfo( "cmscardinfo", SQLCODE ); ERRLOG SQLCLOSECUR(Info_l_cur,"Info_l_cur") return FAILED; } /* 记录不存在 */ else if ( SQLCODE == SQLNOTFOUND ) { strcpy( g_acRspCode, "CMS113" ); sprintf( g_acRspMsg, "卡号[%s]不存在", pstCardInfo->cardno ); ERRLOG SQLCLOSECUR(Info_l_cur,"Info_l_cur") return FAILED; } pubVtoSCmscardinfo( pstCardInfo ); /* 获取卡片种类表 */ iRtn = cmsApiGetCmsCardKind( pstCardInfo->cardkind, &stCardKind ); if ( iRtn ) { ERRLOG SQLCLOSECUR(Info_l_cur,"Info_l_cur") return FAILED; } /*判断是否需要密码检查*/ if( stCardKind.pswdmark[BIT1_LEN]==UNCHKPASSWD ) { sprintf(g_acRspMsg,"无需检查密码"); ERRLOG goto EXIT; } /* 检查密码错误次数 */ if ( ( ( (pstCardInfo->errnumtot >= stCardKind.totalerrnum ) && ( stCardKind.totalerrnum != PWDERRNOTLIMIT ) ) || ( ( pstCardInfo->errnum >= stCardKind.atmerrnum ) && ( stCardKind.atmerrnum != PWDERRNOTLIMIT ) && ( !strcmp( pcHappenPlace, CHANNALID_UNIONATM ) || !strcmp( pcHappenPlace, CHANNALID_ATM ) || !strcmp( pcHappenPlace, CHANNALID_CBATM ) || !strcmp( pcHappenPlace, CHANNALID_HXATM ) || !strcmp( pcHappenPlace, CHANNALID_HKATM ) ) ) ) && ( pstCardInfo->cardstat[ BIT9_LEN ] == BIT9_CARDLOCK ) ) { strcpy( g_acRspCode, "CMS173" ); pubCrtRspInfo( pstCardInfo->cardno ); ERRLOG SQLCLOSECUR(Info_l_cur,"Info_l_cur") return FAILED; } /* 按业务发生地调用加密机函数处理上送密码 */ /* 调用加密机函数处理需要直接加密密码 */ /*判断密码是否正确*/ sprintf( g_acTrcMsg, "1[%s]2[%s]", pcCardPwd, pstCardInfo->passwd ); TRCLOG2 iRtn = ChkPINBLOCK( pcCardPwd, pstCardInfo->cardno, pstCardInfo->passwd ); if ( iRtn ) { if ( !strcmp( g_acRspCode, "HSM200" ) || !strcmp( g_acRspCode, "DPS909" ) ) { strcpy(g_acRspCode,"CMS201"); sprintf(g_acRspMsg,"卡密码不正确"); } ERRLOG SQLCLOSECUR(Info_l_cur,"Info_l_cur") return FAILED; } /* if( strcmp( pcCardPwd, pstCardInfo->passwd ) != 0 ) { sprintf(g_acRspCode,"CMS201"); sprintf(g_acRspMsg,"卡密码不正确"); ERRLOG SQLCLOSECUR(Info_l_cur,"Info_l_cur") return FAILED; } */ /*判断密码错误次数*/ if( pstCardInfo->errnum==0 && pstCardInfo->errnumtot==0 ) { goto EXIT; } else {/*初始化密码错误次数*/ /*给结构宿组赋值*/ pstCardInfo->errnum = ZEROS; pstCardInfo->errnumtot = ZEROS; pubStoVCmscardinfo( pstCardInfo ); /* 修改卡片信息表记录 */ EXEC SQL UPDATE CMSCARDINFO SET errnum = :cmscardinfo_errnum, errnumtot = :cmscardinfo_errnumtot WHERE CURRENT OF Info_l_cur; /* 修改出错 */ if ( SQLCODE ) { strcpy( g_acRspCode, "CMS114" ); pubCrtRspInfo( "cmscardinfo", SQLCODE ); ERRLOG SQLCLOSECUR(Info_l_cur,"Info_l_cur") return FAILED; } }EXIT: sprintf( g_acTrcMsg, "cmsApiChkCardPwd end " ); TRCLOG2 SQLCLOSECUR(Info_l_cur,"Info_l_cur") return SUCCESS;}/******************************************************* ** 函数名称:cmsApiChkTbsPwd ** 功能描述:检查用户密码(查询密码) ** 输入参数: ** pstCmsTbsRegInf ---- 用户密码登记表 ** pcCardPwd ---- 用户密码 ** pcHappenPlace ---- 业务发生地 ** 输出参数: ** ** 涉及库表: ** cmstbsreginf ---- 用户密码登记表 ** 返回结果:int ** 0 ---- 成功 ** -1 ---- 失败 ** 作 者 : Feng ** 版本创建日期 : 2004/09/17 ** 修改记录 : ** 修改人 修改日期 修改位置*******************************************************/int cmsApiChkTbsPwd( pstCmsTbsRegInf, pcCardPwd, pcHappenPlace )struct cmstbsreginf * pstCmsTbsRegInf; /* 用户密码登记表 */char * pcCardPwd; /* 用户密码 */char * pcHappenPlace; /* 业务发生地 */{ /*定义 局部变量*/ int iRtn; /* 函数返回值 */ char caPasswd[ PASSWD_LEN + 1 ]; /* 加密后的密码 */ sprintf( g_acTrcMsg, "cmsApiChkTbsPwd begin " ); TRCLOG2 /*初始化结构*/ memset( caPasswd, 0x00, sizeof( caPasswd ) ); /* 按业务发生地调用加密机函数处理上送密码 */ /* 调用加密机函数处理需要直接加密密码 caPasswd */ strcpy( caPasswd, pcCardPwd ); /*判断密码是否正确*/ /* 电话银行密码错 */ if( strcmp( caPasswd, pstCmsTbsRegInf->inqpasswd ) != 0 ) { sprintf(g_acRspCode,"CMS212"); sprintf(g_acRspMsg,"查询密码不正确"); ERRLOG; return FAILED; } sprintf( g_acTrcMsg, "cmsApiChkTbsPwd begin " ); TRCLOG2 return SUCCESS;}/******************************************************* ** 函数名称:cmsApiChkCardPwd2 ** 功能描述:检查卡密码 ** 输入参数: ** pcCardNo --- 卡号 ** pcCardPwd --- 卡密码 ** pcHappenPlace --- 业务发生地 ** 输出参数: ** ** 涉及库表: ** cmscardinfo --- 卡片信息表 ** 返回结果:int 0 成功 -1 失败 密码不正确 ** 作 者 : UCCB ALex ** 版本创建日期 : 2004/09/17 ** 修改记录 : ** 修改人 修改日期 修改位置*******************************************************/int cmsApiChkCardPwd2( pcCardNo, pcCardPwd, pcHappenPlace )char * pcCardNo; /*卡号*/char * pcCardPwd; /*卡密码 */char * pcHappenPlace; /*业务发生地 */{ struct cmscardinfo stCardInfo; int iRtn; sprintf( g_acTrcMsg, "cmsApiChkCardPwd2 begin " ); TRCLOG2 memset( &stCardInfo, 0x00, sizeof( struct cmscardinfo ) ); strcpy( stCardInfo.cardno, pcCardNo ); iRtn = cmsApiChkCardPwd( &stCardInfo, pcCardPwd, pcHappenPlace ); if ( iRtn ) { ERRLOG return FAILED; } return SUCCESS;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -