📄 pubcardno.c
字号:
/******************************************************* ** 源码文件名称 : PubCardNo.c ** 功能描述 : 卡号的公共函数 ** 所属子系统 : 卡管理 ** 当前文件版本 : 4.0.0.0 ** 作 者 : Feng ** 版本创建日期 : 2004/09/23 ** 修改记录 : ** 修改人 修改日期 修改位置*******************************************************/#include "code.h"#include "attrdef.h"#include "pubcom.h"#include "cmscode.h"/******************************************************* ** 函数名称:cmsGenCardVerifyBit ** 函数功能:生成卡号校验位 ** 输入参数: ** pcCardNo ---- 卡号 ** 输出参数: ** pcCardNo ---- 卡号 ** 输出结果:0 ---- 成功 ** -1 ---- 失败 ** 其他说明:为卡号生成最后一位校验位, 在输入参数返回*******************************************************/int cmsGenCardVerifyBit ( pcCardNo )char *pcCardNo;{ int iNum; /* 循环的计数器 */ int iCardNo[ CARDNO_LEN - 1 ]; /* 卡的每一位数字的数组 */ int iSum=0; /* 计算使用的合计数 */ int iCheckNum; /* 校验位的数字 */ char acCardNo[ CARDNO_LEN + 1 ]; /* 保存卡号的临时变量 */ /* 复制入口参数到临时变量 */ memset ( acCardNo , 0x00 , sizeof( acCardNo ) ); strcpy ( acCardNo , pcCardNo ); strpack( acCardNo ); /* 循环检查卡号每一位是否为数字,并转化为int类型到数组中 */ for ( iNum = 0; iNum < strlen ( acCardNo ); iNum ++ ) { if( acCardNo[iNum] < '0' || acCardNo[iNum] > '9') { strcpy ( g_acRspCode, "CMS107" ); pubCrtRspInfo( pcCardNo ); /* sprintf( g_acRspMsg, "[%s]生成校验位错", pcCardNo ); */ ERRLOG return FAILED; } iCardNo[iNum] = acCardNo[iNum] - '0'; } /* 从后向前计数奇数位计算规则是2倍计算 */ for( iNum = strlen ( acCardNo )-1; iNum >= 0; iNum -= 2 ) { iCardNo[iNum] *= 2; } /* 从后向前计数奇数位计算规则是2倍计算 */ /* 从前向后计算,每一位的个位数和十位数相加累计 */ for( iNum = 0 ; iNum < strlen( acCardNo ); iNum ++ ) { iSum += iCardNo[iNum] / 10 + iCardNo[iNum] % 10; } /* 模减去合计数模10的余数即为校验位的数字值 */ if ( ( iSum % 10 ) == 0 ) iCheckNum = 0; else iCheckNum = 10 - iSum % 10; /* 拼接成完整的卡号 */ sprintf ( acCardNo, "%s%d", acCardNo, iCheckNum ); iNum = strlen ( acCardNo ); acCardNo[ iNum ] = '\0'; strcpy ( pcCardNo, acCardNo ); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -