身份证的奥秘,出现无效引用内存,求助
大神求助 这个某个测试显示无效引用内存 题目是身份证的奥秘
程序代码:#include<stdio.h>
#include<string.h>
int main()
{
char a[20];
int b[18]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
int n,i,j,sum,m;
scanf("%d",&n);
for(j=0;j<n;j++)
{
scanf("%s",a);
if(strlen(a)==18)
{
if(a[17]=='X')
a[17]=10;
else
a[17]=a[17]-'0';
for(i=0;i<17;i++)
a[i]=a[i]-'0';
for(i=0,sum=0;i<17;i++)
{
sum+=(a[i]*b[i]);
}
m=sum%11;
if(m==1)
m=0;
else if(m==0)
m=1;
else
m=(6-m)*2+m;
if(m==a[17])
printf("Valid\n");
else
printf("Invalid\n");
}
else if(strlen(a)==15)
{
for(i=0;i<15;i++)
a[i]=a[i]-'0';
for(i=14;i>5;i--)
{
a[i+2]=a[i];
}
a[18]='\0';
a[6]=1;
if(a[14]==9&&a[15]==9&&a[16]>5)
a[7]=8;
else
a[7]=9;
for(i=0;i<17;i++)
printf("%d",a[i]);
for(i=0,sum=0;i<17;i++)
{
sum+=(a[i]*b[i]);
}
m=sum%11;
if(m==1)
m=0;
else if(m==0)
m=1;
else
m=(6-m)*2+m;
if(m==10)
printf("X\n");
else
printf("%d\n",m);
}
else
printf("Invalid\n");
}
}








