帮看下程序
当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。该校验的过程:
1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
3、将奇数位总和加上偶数位总和,结果应该可以被10整除。
例如,卡号是:5432123456788881
则奇数、偶数位(用红色标出)分布:5432123456788881
奇数位和=35
偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。
最后35+35=70 可以被10整除,认定校验通过。
请编写一个程序,从键盘输入卡号,然后判断是否校验通过。通过显示:“成功”,否则显示“失败”。
比如,用户输入:356827027232780
程序输出:成功
#include "stdio.h"
#include"string.h"
#include"stdlib.h"
#define N 30
main()
{
char a[N];
char *p;
int k,i;
int sumj=0,sumo=0;
printf("please enter any numbers\n");
gets(a);
k=strlen(a);
// printf("%d ",k);
atoi(a);
for(p=a;*p!='\0';p++)
;
p--;
k=k-1;
for(i=1;k>=0;p--,k--,i++)
{
if(i%2!=0)
{
sumj+=(*p);
}
if(i%2==0)
{
if((*p)*2>9)
{
sumo+=((*p)*2-9);
}
else
{
sumo+=(*p)*2;
}
}
}
printf("%d %d",sumj,sumo);
if((sumj+sumo)%10==0)
printf("ok!!");
else
printf("error!!");
}