當前位置:首頁 » 編程語言 » 華農c語言身份證編碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

華農c語言身份證編碼

發布時間: 2022-10-03 20:49:09

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語言題目:身份證號碼與性別

代碼文本:

#include "stdio.h"

#include <string.h>

int main(int argc,char *argv[]){

char s[19];

printf("Please enter your ID number... ID=");

if(scanf("%18s",s)!=1 || strlen(s)!=18){

printf("Input error, exit... ");

return 0;

}

printf("%c ",(s[16]&1 ? 'M' : 'F'));

return 0;

}

㈢ 用c語言求算身份證最後一位,

可以定義一個字元數組,把身份證的每一位存進去,然後遍歷拿到最後一位!也可以定義一個字元串,截取最後一位!

㈣ 用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#語言從鍵盤上輸入身份證號碼

這是大概的實現
至於15轉換到18不行,因為缺少信息(1:具體的年份
2:校驗位的生產公式)
18轉換到15是可以的,不過沒意義
class
ConsoleTest
{
public
static
void
Main(string[]
args)
{
string
id
=
string.Empty;//身份證號
ConsoleTest
ct
=
new
ConsoleTest();
id
=
System.Console.ReadLine();
if
(id.Length
==
18
&&
ct.CheckIDNum18(id))
ct.DisplayID18Info(id);
else
if
(id.Length
==
15
&&
ct.CheckIDNum15(id))
ct.DisplayID15Info(id);
System.Console.ReadKey();
}
public
bool
CheckIDNum18(string
id)
{
Regex
reg18
=
new
Regex(@"^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}[0-9Xx]{1}$");
return
reg18.IsMatch(id);
}
public
bool
CheckIDNum15(string
id)
{
Regex
reg15
=
new
Regex(@"^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$");
return
reg15.IsMatch(id);
}
public
void
DisplayID18Info(string
id)
{
string
birthday
=
id.Substring(6,
8);
string
sex
=
id.Substring(16,
1);
System.Console.WriteLine("生日:"
+
birthday);
if
(Convert.ToInt32(sex)
%
2
==
0)
System.Console.WriteLine("性別:女");
else
System.Console.WriteLine("性別:男");
}
public
void
DisplayID15Info(string
id)
{
string
birthday
=
id.Substring(6,
6);
string
sex
=
id.Substring(14,
1);
System.Console.WriteLine("生日:"
+
birthday);
if
(Convert.ToInt32(sex)
%
2
==
0)
System.Console.WriteLine("性別:女");
else
System.Console.WriteLine("性別:男");
}
}

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

㈦ 輸入一個18位的身份證號碼,輸出其出生日期用c語言怎麼編寫

用一個數組將身份證號存儲起來,輸出其中的第7位到底第14位即可

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