当前位置:首页 » 编程语言 » c语言身份证验证的思路
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言身份证验证的思路

发布时间: 2022-10-16 06:58:51

c语言:身份证

8094748

你给的分数太少了,对待别人的劳动,希望你能有些诚意

程序已经写好,完全符合你的要求,给个邮箱,发给你

㈡ C语言编程:设计一个程序,输入身份证号码,验证身份证号的合法性

你只要对哪些是合法的分分类
就可以写出来这个程序了,就比如判断一个数是不是素数等类似。
首先对这个数什么特征细区分出来

㈢ 在C语言中如何用代码保存身份证号码,并能校验正确性

校验正确性是指是否符合身份证号的格式吗?一般都是用正则表达式来做的

㈣ C语言作业:4. 设计身份证号合法性验证程序

#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");
}

㈤ 利用C语言编写一段程序,能够实现身份证的查询

你去把数据库拿过来我就帮你写
哪个号段是哪个省

口气很大 看的哥巨不爽
内嵌一个B/S就可以实现的事情

㈥ C语言设计程序判断身份证号的合法性,并输出到指定日期的天数

天数包括2019.4.2这天吗?

#include<stdio.h>
#include<string.h>
#include<ctype.h>

#defineTHISYEAR2019
#defineTHISMONTH4
#defineTODAY2
#defineDATA20190402
#defineMOD11

constintdays[2][12]={
{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}
};

constintWF[17]={
7,9,10,5,8,4,2,1,6,
3,7,9,10,5,8,4,2
};

constcharPIN[11]={
'1','0','X','9','8','7',
'6','5','4','3','2'
};


intleapyear(int);//判断闰年
ints2d(char*,int,int);
intcountdays(int,int,int);


intmain(void){

intis_valid=1;//ID是否合格的标志
inty,m,d;
charID[19];
scanf("%s",ID);

if(strlen(ID)!=18){
is_valid=0;
}
else{
for(inti=0;i<17;i++){
if(!isdigit(ID[i])){
is_valid=0;
break;
}
}

y=s2d(ID,6,9);
m=s2d(ID,10,11);
d=s2d(ID,12,13);
if(m<1||m>12||d>31||d<1||
(leapyear(y)&&m==2&&d>29)||
10000*y+100*m+d>=DATA)
is_valid=0;

intsum=0;
for(inti=0;i<17;i++){
sum+=(ID[i]-'0')*WF[i];
}
if(toupper(PIN[sum%MOD])!=toupper(ID[17]))
is_valid=0;
}
if(is_valid){
inttotaldays=countdays(y,m,d);
printf("%d ",totaldays);
}
else
puts("No");
return0;
}


intleapyear(inty){
return(y%4==0&&y%100!=0)||(y%400==0);
}

ints2d(char*id,ints,inte){
intresult=0;
for(inti=s;i<=e;i++)
result=10*result+(id[i]-'0');
returnresult;
}

intcountdays(inty,intm,intd){

inttotal=0;
if(y<THISYEAR){

for(inti=11;i>=m;i--){
total+=days[leapyear(y)][i];
}
total+=days[leapyear(y)][m-1]-d+1;

for(inti=y+1;i<THISYEAR;i++)
total+=leapyear(i)?366:365;

for(inti=0;i<THISMONTH-1;i++)
total+=days[leapyear(THISYEAR)][i];

total+=TODAY;
}
else{
for(inti=y-1;i<THISMONTH-1;i++)
total+=days[leapyear(THISYEAR)][i];

total+=TODAY;
}

returntotal;
}

㈦ 用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 ",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(" ");


}


VC++6.0测试如下(输入一位后按回车输入第二位数)。

㈧ 用c语言编程求 18位 身份证的验证码

除了楼上所说的,在补充一点
1:char id[19]; //最后一个字节是用于'\0'的
2:除了这个原因,还有一个更重要的是gets得到的都是字符,在你的jisuan函数里,for循环中
result+=((*p)*(*q));
这句话其实是字符的ascII码相乘的,并不是数字相乘,可以改成
(((*p) - '0') * ((*q) - '0'));
这样就是对应字符的数字相乘了(这个很好理解吧?)
3:虽然jisuan返回的是个比较小的数,但是在for循环里计算的时候result定义成char型的会有溢出,会对你的结果有影响吧,我建议改成unsigned int

㈨ C语言.设计身份证号合法性验证程序

#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;
}