#include stdio.h
专注于为中小企业提供做网站、网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业清原免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
#include stdlib.h
#include math.h
int main()
{
char st[18];
int num[18],w[18],s=0;
int i ;
scanf("%18s",st);
for(i=0; i18; i++)
num[i]=st[i]-'0';
for( i=0; i18; i++)
printf("%2d ",num[i]);
printf("\n");
if(num[16]%2==0)
printf("女的\n");
else printf("男的\n");
for( i=0; i17; i++)
{
w[i]=(int)pow(2,18-i-1)%11;
printf("%2d ",w[i]);
s+=num[i]*w[i];
}
printf("\ns=%d\n",s);
for( i=0; i17; i++)
{
printf("%2d ",num[i]*w[i]);
}
s%=11;
printf(" = %d\n",s);
if(s==0 num[17]==1)
{
printf("\nok\n");
return 0;
}
if(s==1 num[17]==0)
{
printf("\nok\n");
return 0;
}
if(s==2 (st[17]=='X' || st[17]=='x'))
{
printf("\nok\n");
return 0;
}
if((s=3 s=10) (s+num[17]==12))
{
printf("\nok\n");
return 0;
}
printf("\nerrer\n");
return 0;
}
最后4位数字中的前两位表示当地派出所的编码;
倒数第二位表示公民是男性还是女性(男性用单数,女性用双数);
最后一位数字是一个随机数,又称为校验码。 用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示。
#include "stdio.h"
void main()
{
int i; /*身份证的第i位*/
int s[17]; /*定义一个数组用来存放身份证的前17位*/
int t[17]; /*各位相乘后的数组*/
int m; /*余数*/
int t18; /*身份证的第18位0--9*/
char t18c; /*身份证的第18位X*/
long int sum=0;
for(i=0;i17;i++)
{
printf("请输入身份证的第%d位:",i+1);
scanf("%d",s[i]);
switch(i+1)
{
/*身份证的1到17位要乘的数一次是7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 */
case 1:t[i]=s[i]*7;break;
case 2:t[i]=s[i]*9;break;
case 3:t[i]=s[i]*10;break;
case 4:t[i]=s[i]*5;break;
case 5:t[i]=s[i]*8;break;
case 6:t[i]=s[i]*4;break;
case 7:t[i]=s[i]*2;break;
case 8:t[i]=s[i]*1;break;
case 9:t[i]=s[i]*6;break;
case 10:t[i]=s[i]*3;break;
case 11:t[i]=s[i]*7;break;
case 12:t[i]=s[i]*9;break;
case 13:t[i]=s[i]*10;break;
case 14:t[i]=s[i]*5;break;
case 15:t[i]=s[i]*8;break;
case 16:t[i]=s[i]*4;break;
case 17:t[i]=s[i]*2;break;
}
sum=sum+t[i];
}
printf("前17位相乘后的和为%ld\n",sum);
m=sum%17;
printf("对17取余后的值位:",m);
switch(m)
{
/*各个余数所对应第18位身份证号1 0 X 9 8 7 6 5 4 3 2*/
case 0:t18=1 ;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case 1:t18=0 ;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case 2:t18c='X';printf("这是一个合法的身份证号码,第18位是%c",t18c);break;
case 3:t18=9 ;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case 4:t18=8 ;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case 5:t18=7 ;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case 6:t18=6 ;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case 7:t18=5 ;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case 8:t18=4 ;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case 9:t18=3 ;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case 10:t18=2 ;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
default:printf("这不是一个合法的身份证号码");
}
printf("\n");
}