按照输入的顺序每行输出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; }