|char[][]--string--true--out2|7-8 查验身份证 (15分)

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

猜你喜欢

转载自blog.csdn.net/weixin_44769957/article/details/108960748
今日推荐