用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、显示身份证相关信息:所在行政区域,出生年月日,性别

参考技术A #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; 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语言编写一个程序,验证输入的身份证是不是合法的主要内容,如果未能解决你的问题,请参考以下文章

Python语言编写程序,将两个整数a和b合并成一个整数放到c里面,并打印出来?

用C语言编写一个密码验证程序

c语言输入身份证输出生日,性别,并判断身份证是不是合法

c语言编写判断输入密码是不是正确...

利用c语言数组验证?

用JAVA编写一个对18位身份证的输入验证程序.要求输入的18位数字或最后一位为x时,通过验证,否则不通过.