(1)从卡号最后一位开始,逆向将奇数位相加。
(2)从卡号最后一位开始逆向将偶数位数字,先乘以2(如果乘积是两位数,则将其减去9)再相加。
(3)将奇数位总和与偶数位总和相加,结果应能被10整除。
例如:5432123456788881合法,改变其中任何一位就不合法。
#include<iostream> #include<string> using namespace std; int fun(char *id,int len) { int i,temp,sum1=0,sum2=0; for(i=len-1;i>=0;i=i-2) { sum1=sum1+id[i]-'0'; } for(i=len-2;i>=0;i=i-2) { if((id[i]-'0')*2>9) { temp=(id[i]-'0')*2-9; sum2=sum2+temp; } else { sum2=sum2+(id[i]-'0')*2; } } if(sum1==sum2) { return 1; } return 0; } int main() { char id[19],i; cout<<"输入卡号:"<<endl; cin>>id; int len=strlen(id); if((len<=19&&len>=16)) { for(i=0;i<len;i++) { if(id[i]<'9'&&id[i]>'0') { } else { cout<<"error"; } } } else { cout<<"error"; } if( fun(id,len)==1) { cout<<"true"; } return 0; }