判断身份证号码是否正确

    xiaoxiao2021-03-26  77

    今天写了一道判断身份证对错的题,才发现身份证也有算法。。怪不得我以前自己乱编身份证不能通过。。 科普一下: 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值: Z:0  1  2  3  4  5  6  7  8  9  10 M:1  0  X  9  8  7  6  5  4  3  2 #include<stdio.h> char  bai(int  a) {        char  c;        switch(a)        {                case  0:c='1';break;                case  1:c='0';break;                case  2:c='X';break;                case  3:c='9';break;                case  4:c='8';break;                case  5:c='7';break;                case  6:c='6';break;                case  7:c='5';break;                case  8:c='4';break;                case  9:c='3';break;                case  10:c='2';break;        }        return  c; } int  main() {        char  a[19];        int  c[100]={0},b=0,n,i,j,q[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2},sum,z;        printf("请输入18位身份证号码(X为大写):");        scanf("%s",a);                sum=0;        for(j=0;j<17;j++){        if(a[j]<'0'||a[j]>'9')        {                b=1;                break;        }        z=(a[j]-'0')*q[j];        sum+=z;        }        sum=sum;        if(bai(sum)!=a[17])        {                b=1;        }                if(!b)        printf("身份证号码正确");        else        printf("身份证号码错误");        return  0;

    }

    转载请注明原文地址: https://ju.6miu.com/read-658684.html

    最新回复(0)