按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。
//7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2
//1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int n,k=0,sum,cnt=0;
int w[17]={
7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char x[110]={
'1' ,'0' ,'X' ,'9' ,'8' ,'7' ,'6' ,'5' ,'4' ,'3' ,'2'};
vector<string>v;
bool flag;
int main()
{
cin>>n;
char c[110][20];
for(int i=0;i<n;i++){
sum=0;
cin>>c[i];
for(int j=0;j<17;j++){
flag=true;
if(c[i][j]>='0'&&c[i][j]<='9'){
sum+=(c[i][j]-'0')*w[j];
}else{
//cout<<c[i]<<endl;
v.push_back(c[i]);
flag=false;
break;
}
}
if(flag==true){
int index=sum%11;
if(c[i][17]==x[index]){
cnt++;
}//else{
// cout<<c[i]<<endl;
// }
else{
v.push_back(c[i]);
}
}
}
if(cnt==n){
cout<<"All passed";
}else{
for(int i=0;i<v.size();i++){
cout<<v[i]<<endl;
}
}
return 0;
}