用C语言编写一个程序,验证输入的身份证是不是合法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C语言编写一个程序,验证输入的身份证是不是合法相关的知识,希望对你有一定的参考价值。
源程序如下:#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;i<17;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");
VC++6.0测试如下(输入一位后按回车输入第二位数): 参考技术A #include<stdio.h>
#include<string.h>
int verifyIDCard(char input[]);
int runnian(int year);
int main()
int k;
char input[100];
gets(input);
k=verifyIDCard(input);
if(k==0)
printf("Invalid\n");
else
printf("Valid\n");
return 0;
int verifyIDCard(char string[])
int i,k,n=0,flag=0,month=0,days=0;
char c;
if(strlen(string)!=18) return 1;
for(i=0;i<17;i++)
c=string[i];
if(c<'0'||c>'9')
return 2;
if((string[17])!='x'&&(string[17]<'0'||string[17]>'9'))
return 3;
n=(string[6]-'0')*1000+(string[7]-'0')*100+(string[8]-'0')*10+(string[9]-'0');
days=(string[12]-'0')+(string[13]-'0');
month=(string[10]-'0')*10+(string[11]-'0');
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
k=31;
if(days>k) return 4;
else if(month==4||month==6||month==9||month==11)
k=30;
if(days>k) return 4;
else if(month!=2) return 4;
flag=runnian(n);
if(flag==0)
if((month==2)&&string[12]+string[13]>28) return 4;
else
if((month==2)&&days>29) return 4;
return 0;
int runnian(int year)
if(year%4==0&&year%100!=0||year%400==0)
return 1;
return 0;
参考技术B int checkIdNo(char *idno)
int jq[17]=7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2;
char end[11]="10X98765432";
int i,sum=0;
for(i=0; i<17; i++)
if(idno[i]>'0' || idno[i]<'9')
sum += (idno[i]-48)*jq[i];
else
return -1;
sum = sum%11;
if(end[sum]==idno[17])
return 0;
return -1;
C语言.设计身份证号合法性验证程序
设计身份证号合法性验证程序
1、接受键盘输入的身份证号
2、验证身份证是否合法有效
3、显示身份证相关信息:所在行政区域,出生年月日,性别
#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; i<18; i++)
num[i]=st[i]-'0';
for( i=0; i<18; i++)
printf("%2d ",num[i]);
printf("\n");
if(num[16]%2==0)
printf("女的\n");
else printf("男的\n");
for( i=0; i<17; 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; i<17; 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;
以上是关于用C语言编写一个程序,验证输入的身份证是不是合法的主要内容,如果未能解决你的问题,请参考以下文章