當前位置:首頁 » 編程語言 » 如何用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);