查验身份证

题目:

 题目试了很多种方法,改了很多次才完成

总结一下思路:

首先需要接收输入的身份证号码

再检验前17位是不是数字

然后求加权和对11取模的数是否与校验码一致

最后将有问题的号码全部输出

里面还有许多小细节需要注意一下,我都有在代码里加以标注,代码如下:

#include<stdio.h>
int main()
{   
    char s[100][20];//前面存放第几个输入的号码,后面存放号码
	int  a[18]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//权重分配 
    char m[11] = {'1','0','X','9','8','7','6','5','4','3','2'};//校验码 
    int n,num=0,i,j,b;
    scanf("%d",&n);
    getchar();//下面将收取字符,故要把回车去掉 
    for(i=0;i<n;i++)
    {
    	 scanf("%s",s[i]);
	}
    for(i=0;i<n;i++)//从输入的第一个身份证开始 
    {
        for(j=0;j<17;j++)//判断前17位是否为数字 
            if(s[i][j]-'0'<0||s[i][j]-'0'>9)//s需要强制转化一下类型
            break;//不是直接跳出
        if(j==17)//前17个都是数字
        {
            int sum=0;
            for(j=0;j<17;j++)
                    sum+=(s[i][j]-'0')*a[j];
               b=sum%11;
            if(m[b]!=s[i][17])//判断最后一位 
           puts(s[i]);
           else num++;
        }
        else puts(s[i]);
    }
    if(num==n) printf("All passed\n");//当没输出的身份证个数与输入的一样时,则全部正确 
    return 0;
}

 希望对大家有所帮助!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值