当前位置:首页 » 编程语言 » 如何用C语言做公民身份证
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

如何用C语言做公民身份证

发布时间: 2022-05-18 09:30:10

㈠ 身份证c语言程序(C高手进!!!!)

。。。。。。调用数据库很简单,你自己试试,不要什么事都问,要有点自己动手解决问题的能力才行啊。

为了20分编个程序......算了

㈡ C语言.题身份证解析: 身份证号码为18位:前6位数字是所在县市的行政区化代码;接着8位是出生 日

按从左到右数1-6位表示出生地编码,7-10位出生年份,11、12位出生月份,13、14位出生日期,15、16位出生顺序编号,17位性别标号,18位效验码。详细的是1、2位为所在省份代码,3、4位为所在城市代码,5、6位是所在区县代码。15、16位是所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。第17位奇数分给男性,偶数分给女性。身份证号码的最后一位是校验码,其中的字母X是用来代替数字“10”的。

㈢ C语言课程设计,用c语言设计一户籍管理系统,求所写代码

//多给点财富
#include<stdio.h>
#include<stdlib.h>
typedef struct tagHuJiXinXi
{
char shfzhh[64]; //身份证号
char xm[16]; //姓名
char xb[8]; //性别
int nl; //年龄
char xl[64]; //学历
char zhzh[64]; //住址
char dh[32]; //电话
}HuJiXinXi,*PtHuJiXinXi;
void readfromfile();
void writetofile();
void tuichu();
void add();
void outputone();
void outputall();
void sortbyage();
void myrealloc();
void findbyagerange();
void del();
void alter();
void showmenu();
void processmenu(int m);
PtHuJiXinXi pt;
int count=0,capacity=16;
int main()
{
int m;

pt=(PtHuJiXinXi)calloc(capacity,sizeof(HuJiXinXi));
readfromfile();
while(1)
{
showmenu();
scanf("%d",&m);
processmenu(m);
}
system("PAUSE");
return EXIT_SUCCESS;
}
void processmenu(int m)
{
switch(m)
{
case 0:
tuichu();
break;
case 1:
add();
break;
case 2:
del();
break;
case 3:
alter();
break;
case 4:
outputall();
break;
case 5:
sortbyage();
break;
case 6:
findbyagerange();
break;
case 7:
writetofile();
break;
default:
printf("不可识别的命令。\n");
}
}
void myrealloc()
{
if(count+1>=capacity)
{
int i;
capacity*=2;
PtHuJiXinXi temppt=(PtHuJiXinXi)calloc(capacity,sizeof(HuJiXinXi));
for(i=0;i<count;i++)
{
temppt[i]=pt[i];
}

free(pt);
pt=temppt;
}
}
void readfromfile()
{
char f[128];
FILE *inf;
HuJiXinXi hjxx;

printf("请输入包含户籍信息的文件的文件名(文件中每行一条户籍信息,");
printf("格式:身份证号 姓名 性别 年龄 学历 住址 电话)...\n");
gets(f);
inf=fopen(f,"r");
if(NULL!=inf)
{
do
{
fscanf(inf,"%s %s %s %d %s %s %s",hjxx.shfzhh,hjxx.xm,hjxx.xb,&hjxx.nl,hjxx.xl,hjxx.zhzh,hjxx.dh);
myrealloc();
pt[count++]=hjxx;
}while(!feof(inf));
fclose(inf);
printf("信息已成功加载。\n");
}
else
{
printf("文件名无效或文件无数据。\n");
}
}
void writetofile()
{
char f[128]={'\0'};
FILE *outf;
int i;

printf("请输入保存户籍信息的文件的文件名:\n");
scanf("%s",f);
outf=fopen(f,"w");
if(NULL!=outf)
{
for(i=0;i<count;i++)
{
fprintf(outf,"%s %s %s %d %s %s %s",pt[i].shfzhh,pt[i].xm,pt[i].xb,pt[i].nl,pt[i].xl,pt[i].zhzh,pt[i].dh);
if(count-1!=i)
{
fprintf(outf,"%s","\n");
}
}
fclose(outf);
printf("文件保存成功。\n");
}
else
{
printf("文件名无效。\n");
}
}
void showmenu()
{
char menu[]="菜单:\n0、退出\n1、添加一条信息\n2、删除一条信息\n3、批量修改\n4、浏览全部信息\n5、按年龄排序 \n6、按年龄区间查询\n7、保存到文件\n请选择一个菜单:";

puts(menu);
}
void tuichu()
{
if(NULL==pt)
{
free(pt);
}
exit(0);
}
//判断身份证号是否重复
int isshfzhhchf(char s[64])
{
int i,r=0;

for(i=0;i<count;i++)
{
if(!strcmp(pt[i].shfzhh,s))
{
r=1;
break;
}
}
return r;
}
void add()
{
myrealloc();
printf("添加一条户籍信息。\n");
printf("请输入身份证号 姓名 性别 年龄 学历 住址 电话:\n");
scanf("%s %s %s %d %s %s %s",pt[count].shfzhh,pt[count].xm,pt[count].xb,&pt[count].nl,
pt[count].xl,pt[count].zhzh,pt[count].dh);
if(!isshfzhhchf(pt[count].shfzhh))
{
count++;
printf("添加成功。\n");
}
else
{
printf("身份证号重复,添加失败。\n");
}
}
//输出下标为n的一条户籍信息
void outputone(int n)
{
if(n>=0 && n<count)
{
printf("第%d条户籍信息:\n",n+1);
printf("%s %s %s %d %s %s %s。\n",pt[n].shfzhh,pt[n].xm,pt[n].xb,pt[n].nl,pt[n].xl,pt[n].zhzh,pt[n].dh);
}
else
{
printf("没有第%d条户籍信息存在。\n",n+1);
}
}
void outputall()
{
if(0==count)
{
printf("系统已空。\n");
}
else
{
int i;
for(i=0;i<count;i++)
{
outputone(i);
}
}
}
void sortbyage()
{
int i,j,px;
HuJiXinXi hjxx;

printf("子菜单:\n1、升序\n2、降序\n请选择:");
scanf("%d",&px);
if(1==px || 2==px)
{
for(i=0;i<count-1;i++)
{
for(j=0;j<count-i-1;j++)
{
if(1==px)
{
if(pt[j].nl>pt[j+1].nl)
{
hjxx=pt[j+1];
pt[j+1]=pt[j];
pt[j]=hjxx;
}
}
else
{
if(pt[j].nl<pt[j+1].nl)
{
hjxx=pt[j+1];
pt[j+1]=pt[j];
pt[j]=hjxx;
}
}
}
}
printf("排序完成。\n");
}
else
{
printf("无法处理的子菜单命令。\n");
}
}
void findbyagerange()
{
int i,min,max,c=0;

printf("请输入要查找的户籍信息的最小年龄和最大年龄:");
scanf("%d %d",&min,&max);
printf("查询结果如下:\n");
for(i=0;i<count;i++)
{
if(pt[i].nl>=min && pt[i].nl<=max)
{
outputone(i);
printf("符合你的要求。\n");
c++;
}
}
if(0==c)
{
printf("没有符合你的要求的户籍信息。\n");
}
}
void del()
{
int i,n;
HuJiXinXi hjxx;

printf("请输入要删除的是第几条户籍信息:");
scanf("%d",&n);
if(n-1>=0 && n-1<count)
{
hjxx=pt[n-1];
for(i=n;i<count;i++)
{
pt[i-1]=pt[i];
}
printf("删除成功。\n第%d条户籍信息:\n",n);
printf("%s %s %s %d %s %s %s。",hjxx.shfzhh,hjxx.xm,hjxx.xb,hjxx.nl,hjxx.xl,hjxx.zhzh,hjxx.dh);
printf(",已删除。\n");
count--;
}
else
{
printf("删除失败。\n不存在第%d条户籍信息。\n",n);
}
}
//根据hjxx的值修改下标为n的户籍信息
void change(HuJiXinXi hjxx,int n)
{
if(strcmp(hjxx.shfzhh,"*"))
{
strcpy(pt[n].shfzhh,hjxx.shfzhh);
}
if(strcmp(hjxx.xm,"*"))
{
strcpy(pt[n].xm,hjxx.xm);
}
if(strcmp(hjxx.xb,"*"))
{
strcpy(pt[n].xb,hjxx.xb);
}
if(-1!=hjxx.nl)
{
pt[n].nl=hjxx.nl;
}
if(strcmp(hjxx.xl,"*"))
{
strcpy(pt[n].xl,hjxx.xl);
}
if(strcmp(hjxx.zhzh,"*"))
{
strcpy(pt[n].zhzh,hjxx.zhzh);
}
if(strcmp(hjxx.dh,"*"))
{
strcpy(pt[n].dh,hjxx.dh);
}
}
void alter()
{
int n;
HuJiXinXi hjxx;
char nl[16];

while(1)
{
printf("请输入要修改第几条户籍信息(-1退出循环):");
scanf("%d",&n);
if(-1==n)
{
break;
}
else if(n-1>=0 && n-1<count)
{
printf("修改...\n");
outputone(n-1);
printf("请输入将此户籍信息修改后的新的姓名 性别 年龄 学历 住址 电话(保持原值的用*代替):\n");
scanf("%s %s %s %s %s %s",hjxx.xm,hjxx.xb,nl,hjxx.xl,hjxx.zhzh,hjxx.dh);
hjxx.nl=(strcmp(nl,"*") ? atoi(nl) : -1);
strcpy(hjxx.shfzhh,"*");
change(hjxx,n-1);
printf("修改完成。\n");
}
else
{
printf("无法修改,不存在第%d条户籍信息。\n",n);
}
}
}

㈣ C语言中,如何生成身份证年份的随机数(用rank()函数),并校验身份证是否合法

最后4位数字中的前两位表示当地派出所的编码;

倒数第二位表示公民是男性还是女性(男性用单数,女性用双数);

最后一位数字是一个随机数,又称为校验码。 用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示。

㈤ 如何用c语言实现输入身份证号输出年龄

1、身份证号有18位,无符号长整型unsigned
long也存不下的,不适合用数值计算的方法解决此类问题。因为身份证号的格式标准统一,所以可以使用字符串处理的方法实现。
1)把输入的身份证号保存到字符串中。
2)取其中的第7到14个字符
3)输出2、例程:#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char id[]="46198704030811";
printf("请输入您的身份证号(18位数字):\n");
scanf("%s",id);
printf("您出生在%c%c%c%c年%c%c月%c%c日\n",id[6],id[7],id[8],id[9],id[10],id[11],id[12],id[13]);
system("pause");
return 0;
}

㈥ 用C语言写身份证识别仪读取身份证信息并打印的软件,前提都要知道设备的那些条件(请大神详细讲一下。)

其实只需要用OCR进行身份证识别技术,即对身份证进行拍照或扫描得到身份证图片。然后用C语言编写图像处理程序。再利用OCR识别技术,对得到的图片识别、栏目提取然后再以数据流的方式进行导出就可以了。可以试一下图睿信息的身份证识别软件或证件识别软件。

㈦ C语言:身份证

8094748

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

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

㈧ C语言设计身份证号信息提取器:输入一身份证号后输出此人的出生年、月、日。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char id[]="46198704030811";
printf("请输入您的身份证号(18位数字):\n");
scanf("%s",id);
printf("您出生在%c%c%c%c年%c%c月%c%c日\n",id[6],id[7],id[8],id[9],id[10],id[11],id[12],id[13]);
system("pause");
return 0;
}

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

㈩ 利用C语言编写一段程序,能够实现身份证的查询 用链表的形式查询,如查询省——市——县等分开一个个查询

#include <cstdlib>
#include <iostream>
#include <string.h>

/*******************************************
功 能: 身份证号查询
随机生成身份证号
typedef struct enum srand rand 使用演示
函数指针使用演示
Linux系统源代码中的公共列表LIST使用演示
文件名: codeid2.cpp
相关文件: 全国各地区的代码信息文件code.bin
作 者: 李永
日 期: 2010.9.4
******************************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys\timeb.h>
#include <conio.h>
#include <dos.h>
using namespace std;

typedef struct list_head{
struct list_head *next;
struct list_head *prev;
}LIST;

typedef struct _Page{

LIST sort_list;
long Code;
char Name[100];
int Hash;
LIST Hash_List;
}PAGE;

//用于读写文件
typedef struct _context{
long Code; //地区代码,6位整数
char Name[100]; //地区信息
} IDCODE;

typedef enum _member_list_name{
sort_list,Hash_List
}MEMBER_LIST_NAME;

typedef struct _person_id {
char Code[19]; //个人身份证号码
} PERSON_ID;

typedef struct{
long Code; //地区代码,6位长
char Name[100];//地区代码的名称,即地址信息
int Year;
int Month;
int Day;
int Sex;
PERSON_ID _id; //18位个人身份证号码
} ID_INFOR;

//存放系统当前的日期和时间
typedef struct{
int year;
int month;
int day;
int hour,minute, second;
int weekday;
}SYSDATE;

//初始化列表的头指针,让它指向自己
#define Init_List(ptr) do { \
(ptr)->next = (ptr); \
(ptr)->prev = (ptr); \
} while (0)

//由一个结构ptr,计算出它所在的宿主结构的地址
//type 宿主结构的类型名称
//member 是ptr在宿主结构中的名称
#define list_entry(ptr,type,member) \
((type*)((char*)(ptr)-(unsigned long)(&((type*)0)->member)))

#define MAX_NUM 20

typedef int (*PFUN_COMPARE)(LIST * _list1, LIST * _list2,MEMBER_LIST_NAME ListName);
typedef void(*PFUN_PRINT)(LIST*head, MEMBER_LIST_NAME ListName);