版权声明:版权归作者WeiSteven所有,转载请注明!
不是所有的银行卡都是有效地,它是遵循一定的规律的。
对于一个卡号,验证其证伪可以采用:
奇数位数字相加求和
偶数位每位乘以2,如果超过10,则减9作为此位数字,然后求偶数位和
奇数位和加上偶数位和应该是10的倍数。
如果不满足上述条件,则此银行卡号是非法的。
请编写程序,判断给定的银行卡号是否合法
参考答案:
代码
1 #include <stdio.h>
2 #include <string.h>
3 int main()
4 {
5 //freopen("2_3.txt","r",stdin);
6 char scard[100];//读取卡号数据
7 int sumOdd=0;
8 int sumEven=0;
9 printf("输入卡号:\n");
10 while(scanf("%s",scard)!=EOF)
11 {
12 //初始化需要用的变量
13 sumOdd=0;
14 sumEven=0;
15 int lenString=strlen(scard);
16 //逆序进行偶奇数求和
17 for(int i=lenString-1;i>=0;i--)
18 {
19 if((lenString-i)%2==1)
20 {
21 sumOdd+=scard[i]-'0';
22 }
23 else
24 {
25 int stemp=(scard[i]-'0')<<1;//偶数是*2 判断大小
26 sumEven+=(stemp);
27 if(stemp>=10)
28 sumEven-=(9);
29 }
30 }
31 if((sumOdd+sumEven)%10==0)
32 printf("成功\n");
33 else
34 {
35 printf("失败\n");
36 }
37 printf("输入卡号:\n");
38 }
39 return 1;
40 }
2 #include <string.h>
3 int main()
4 {
5 //freopen("2_3.txt","r",stdin);
6 char scard[100];//读取卡号数据
7 int sumOdd=0;
8 int sumEven=0;
9 printf("输入卡号:\n");
10 while(scanf("%s",scard)!=EOF)
11 {
12 //初始化需要用的变量
13 sumOdd=0;
14 sumEven=0;
15 int lenString=strlen(scard);
16 //逆序进行偶奇数求和
17 for(int i=lenString-1;i>=0;i--)
18 {
19 if((lenString-i)%2==1)
20 {
21 sumOdd+=scard[i]-'0';
22 }
23 else
24 {
25 int stemp=(scard[i]-'0')<<1;//偶数是*2 判断大小
26 sumEven+=(stemp);
27 if(stemp>=10)
28 sumEven-=(9);
29 }
30 }
31 if((sumOdd+sumEven)%10==0)
32 printf("成功\n");
33 else
34 {
35 printf("失败\n");
36 }
37 printf("输入卡号:\n");
38 }
39 return 1;
40 }