中国身份证编码机制及实现

编程入门 行业动态 更新时间:2024-10-11 07:33:15

<a href=https://www.elefans.com/category/jswz/34/1770066.html style=中国身份证编码机制及实现"/>

中国身份证编码机制及实现

/*
* =====================================================================================
*
*       Filename:  identity.c
*
*    Description:  中华人民共和国身份证编码机制
*
*        Version:  1.0
*        Created:  2011年01月02日 14时20分38秒
*       Revision:  none
*       Compiler:  gcc
*
*         Author:  Yang Shao Kun (), cdutyangshaokun@163
*        Company:  College of Information Engineering of CDUT
*
* =====================================================================================
*/

/*编码规则:公民身份号码是特征组合码,由17位数字本体码和一位校验码组成排列顺
             序从左到右依次为:六位数字地址码,八位数字出生日期码,三位数字顺
            序码和一位校验码。
例如:abcdefghijklmnopqr
其含义如下:
            1:地址码abcdef,表示编码对象常住户口所在县的行政区划代码。
                ab:所在省市        
                cd:所在地区
                ef:所在县区
            2:出生日期码:ghijklmn,表示编码对象常住户口所在县的行政区划代
            码。
                ghij:所在年
                kl:出生月
                mn:出生日
            3:顺序码:opq,表示在同一地址所标识的区域范围内,对同年同月,同
            日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
                op:户口所归属的派出所
                q:性别及顺序,男为奇数,女为偶数。表示前16位数字完全相同时,
                    某个公民的顺序号,如果前16位数字均相同的同性别的公民超过
                    5个,则可以"进位"到第16位。还特殊规定,最后3位数为996
                    997 998 999 这4个号码为百岁老人的代码,这4个号码不再分配
                    给任何派出所。
            4:校验码:r,一位数字,通过前17位数字根据一定计算得出。
            公式为:
                    s=sum(ai*wi),i=0,,,16
                    ai,表示第i 位置上的省份证号码数字值,wi 表示第i 位置上的
                    加权因子,其各位对应的值依次为:7 9 10 5 8 4 2 1 6 3 7 9
                    10 5 8 4 2.
            通俗解释为:用s 除以 11 ,看最后的余数,如果出尽,为0 余数为1,
                        则计为 1,最大余数为10,全部数字为:0~10共11个数字
                        用Y表示。
            对应关系为:
                    Y的值:0 1 2 3 4 5 6 7 8 9 10
                   校验码:1 0 X 9 8 7 6 5 4 3 2
                  如果校验码不符合这个规则,则肯定是假号码。
     */
/*编写一个省份证码的验证程序*/
#include
#include
#include
int main(int argc,char **argv)
{

    int wi[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    char identity[18];/*用来存放证件号码*/
    int  s=0;
    int i,j;
loop:    printf("please enter you identity num: ");
    scanf("%s",identity);
    printf("/n");
    char bi[17];
    int ai[17];
    memset(bi,0,17);
    memset(ai,0,17);
    for(i=0;i<17;i++)
        bi[i]=identity[i];
    for(i=0;i<17;i++)
    {
        if(bi[i]=='0') ai[i]=0;
        else if(bi[i]=='1') ai[i]=1;
        else if(bi[i]=='2') ai[i]=2;
        else if(bi[i]=='3') ai[i]=3;
        else if(bi[i]=='4') ai[i]=4;
        else if(bi[i]=='5') ai[i]=5;
        else if(bi[i]=='6') ai[i]=6;
        else if(bi[i]=='7') ai[i]=7;
        else if(bi[i]=='8') ai[i]=8;
        else if(bi[i]=='9') ai[i]=9;
    }
    for (i=0;i<17;i++)
    {
        s+=ai[i]*wi[i];
    }
    int y;
    char check=' ';/*校验码位数值*/
    y=s%11;
    if(y==0) check='1';
    else if(y==1) check='0';
    else if(y==2) check='X';
    else if(y==3) check='9';
    else if(y==4) check='8';
    else if(y==5) check='7';
    else if(y==6) check='6';
    else if(y==7) check='5';
    else if(y==8) check='4';
    else if(y==9) check='3';
    else if(y==10) check='2';

    if(identity[17]!=check)
    {
        printf("错误的身份证号码,请输入正确的身份证件号码!!!/n");
        goto loop;
    }
    else if(identity[17]==check)
    {
        printf("合法的身份证号码!!!/n");
        printf("你的生日是:");
        for(i=0;i<17;i++)
        {
            if(i==6)
            {
                for(j=0;j<8;j++)
                    printf("%d",ai[i+j]);
            }
        }
        printf("和你同年同月同日生的人的个数有:");
        if(ai[16]%2)
        {
            printf("you are a man!!!");
            j=ai[16];
            for(i=0;i<6,j>0;i++)
            {
                j-=2;
            }
            printf("和你同年同月同日生的人的个数至少有:%d",i);
        }
        else if(!ai[16]%2)
        {
            printf("you are a girl!!!");
            j=ai[16];
            for(i=0;i<6,j>=0;i++)
            {
                j-=2;
            }
            printf("和你同年同月同日生的人的个数至少有:%d",i);
        }

    }
    return 1;
}

更多推荐

中国身份证编码机制及实现

本文发布于:2024-02-05 11:12:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1745258.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:中国   身份证   机制

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!