📄 银行卡号码的有效性检查程序.exe
字号:
/************************************************************
FileName: card.c
Author: yuanfen127
Date: 2007年1月21日
Description: 银行卡号码的有效性检查程序
Version: 1.0
Function List:
1. int CreatBit(char *cdno, int length) 根据前面length-1位长度生成最后校验位
2. int iCheckBit(char *sbuf) 调用CreateBit生成校验位和输入的比较
History:
<author> <time> <version > <desc>
***********************************************************/
#include <stdio.h>
#include <string.h>
main()
{
char card_no[20];
printf("请输入19位卡号:");
scanf("%19s",card_no);
printf("卡号:%s\n",card_no);
/*CreatBit(card_no,strlen(card_no)-1);*/
if ( strlen(card_no) < 19 )
{
printf("卡号长度错误\n");
return -1;
}
if ( 0 != iCheckBit(card_no) )
{
printf("卡号错误!\n");
}
else
{
printf("卡号正确!\n");
}
}
int CreatBit(char *cdno, int length)
{
int CI[18]={1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2};
int i,d,result;
int chk_dig=0;
if ( strlen(cdno) < length)
{
printf("输入的长度错,长度=%d\n",strlen(cdno));
return -1;
}
for ( i=0; i<length; i++ )
{
d = cdno[i]-48;
result = d * CI[i];
chk_dig += result/10 + result%10;
}
chk_dig = 10 - chk_dig%10;
chk_dig = (chk_dig==10) ? 0 : chk_dig;
cdno[length] = chk_dig + 48;
printf("检验位:%d\n",chk_dig);
return 0;
}
int iCheckBit(char *sbuf)
{
char cardbuf[19];
int l_len;
memcpy( cardbuf, sbuf, 19 );
l_len = strlen(sbuf);
l_len = l_len > 19 ? 19 : l_len ;
if( (CreatBit(cardbuf, l_len - 1 ) != 0) || memcmp(sbuf, cardbuf, l_len))
{
return(-1);
}
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -