1、last数组里的小写x换成大写
2、if ((int)sfz[17] == (int)last[yu]) //转换为int型进行比较
#include<stdio.h>
int main()
{
int hang = 0, b = 0, sum = 0, i, j, yu = 0;
int a[] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };
char last[] = { '1','0','X','9','8','7','6','5','4','3','2' }; //小写x换成大写
scanf_s("%d", &hang);
getchar();
for (i = 0; i < hang; i++)
{
char sfz[1000];
gets(sfz);
for (j = 0; j < 17; j++)
{
b = ((int)(sfz[j] - '0')) * a[j];
sum = sum + b;
}
yu = sum % 11;
if ((int)sfz[17] == (int)last[yu]) //转换为int型进行比较
printf("right\n");
else
printf("wrong\n");
}
return 0;
}
把代码粘贴出来看看,图片的话不方便
供参考:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int Chk18PaperId (const char *sPaperId)//函数用来判断身份证号校验码是否合法
{
int i;
long lSumQT = 0;
int R[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//加权因子
char sChecker[11]={'1','0','X','9','8','7','6','5','4','3','2'};//校验码
if(strlen(sPaperId) != 18) return -1; //检验长度
for (i=0; i<18; i++)
{
if(!isdigit(sPaperId[i]) && !((sPaperId[i] == 'X' || sPaperId[i] == 'x') && i == 17))
{
return -1;//如果身份证号码中某一位不是数字或者X的话,则返回-1,失败
}
}
for (i=0; i<=16;i++)//验证最末的校验码
{
lSumQT += (sPaperId[i]-'0')*R[i];
}
if (sChecker[lSumQT%11] != sPaperId[17])
{
return -1;
}
return 0;
}
int main()
{
int T;
char Personal_ID[18];
scanf("%d", &T);
getchar();
while (T--){
gets(Personal_ID);
if(!Chk18PaperId(Personal_ID))
printf("right\n");
else
printf("wrong\n");
}
return 0;
}