注意点:
1.字符转换为数字-'0'就行
2.可以定义一个flag,使flag=1,只要有一个不合法的直接使
之变为0即可。
3.只要证明前面17位数字的加权和%11是否等于身份证的最后一
位就成了。
#include <stdio.h>
int main()
{
int a[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2},n,c=0,j,sum,flag=1;
char str[18],ch[11]={'1','0','X','9','8','7','6','5','4','3','2'};
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s",str);
sum=0;
for(j=0;j<17;j++)
sum=sum+(str[j]-'0')*a[j]; //求权重
if(ch[sum%11]!=str[17]) //最后一位校验码
{
flag=0;
printf("%s\n",str);
}
}
if(flag==1)
printf("All passed");
return 0;
}

身份证号码合法性检查
该代码实现了一个简单的身份证号码合法性验证程序,通过计算前17位数字的加权和并校验最后一位数字来判断身份证号码是否有效。如果所有输入的身份证号码都通过校验,则输出All passed。
1553

被折叠的 条评论
为什么被折叠?



