#include stdio.h
專注于為中小企業(yè)提供做網(wǎng)站、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)清原免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
#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位數(shù)字中的前兩位表示當(dāng)?shù)嘏沙鏊木幋a;
倒數(shù)第二位表示公民是男性還是女性(男性用單數(shù),女性用雙數(shù));
最后一位數(shù)字是一個隨機(jī)數(shù),又稱為校驗碼。 用來檢驗身份證的正確性。校檢碼可以是0~9的數(shù)字,有時也用x表示。
#include "stdio.h"
void main()
{
int i; /*身份證的第i位*/
int s[17]; /*定義一個數(shù)組用來存放身份證的前17位*/
int t[17]; /*各位相乘后的數(shù)組*/
int m; /*余數(shù)*/
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位要乘的數(shù)一次是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)
{
/*各個余數(shù)所對應(yīng)第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");
}