注意点:
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;
}