C语言程序设计:写一个函数,从给定的身份证号中提取出生年月日
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言程序设计:写一个函数,从给定的身份证号中提取出生年月日相关的知识,希望对你有一定的参考价值。
这个简单,用以字符串str[20]=身份证号码;出生月日就是倒数第7个元素到第14个元素结束;用一个for循环,如str[20]="45032519901016127X";for(i=6;i<=13;i++) putchar(str[i]);就可以了
结果是19901016,有木有?追问
如果用调用函数的方法做,能行吗?
追答可以呀,你得先输入身份证号!用gets(str)就可以啦!
参考技术A #include<stdio.h>int year=0,month=0,day=0;
void getDate(char *num)
year=(num[6]-'0')*1000+(num[7]-'0')*100+(num[8]-'0')*10+(num[9]-'0');
month=(num[10]-'0')*10+(num[11]-'0');
day=(num[12]-'0')*10+(num[13]-'0');
void main()
char num[20]=NULL;
printf("请输入身份证号: \n");
scanf("%s",num);
getDate(num);
printf("year=%d,month=%d,day=%d",year,month,day);
本回答被提问者采纳 参考技术B #include <stdio.h>
#include <string.h>
void GetDate(char* str, int& year, int& month, int& day)
char strYear[5];
char strMonth[3];
char strDay[3];
memcpy(strYear, str + 6, 4);
memcpy(strMonth, str + 10, 2);
memcpy(strDay, str + 12, 2);
year = atoi(strYear);
month = atoi(strMonth);
day = atoi(strDay);
void main()
char str[19];
int year, month, day;
printf("身份证号:");
scanf("%s", str);
GetDate(str, year, month, day);
printf("出生年月日:%d %d %d\n", year, month, day);
参考技术C #include
#include
void
main()
int
len,year,month,day;
char
str[30],str1[10];
printf("\n请输入身份证号:\n");
gets(str);
len=strlen(str);
if(len==18)
sscanf(str,
"%6c%4d%2d%2d",
str1,&year,&month,&day);
printf("出生日期:%d年%d月%d日\n",year,month,day);
else
printf("输入错误!\n");
参考技术D #include <stdio.h>
void main()
int a[18];
printf("输入身份证号码:");
for(int i=0;i<18;i++)
scanf("%1d",&a[i]);
for(i=6;i<10;i++)
printf("%d",a[i]);
printf("年");
for(i=10;i<12;i++)
printf("%d",a[i]);
printf("月");
for(i=12;i<14;i++)
printf("%d",a[i]);
printf("日\n");
Excel中对身份证号的处理
一、从身份证号码中提取出生年月。
方法:
在目标单元格中输入公式:=TEXT(MID(C3,7,8),"00-00-00")。
解读:
1、MId函数的作用为:从文本字符传中指定的起始位置返回指定长度的字符串。语法结构为:=Mid(字符串,起始位置,长度)。
2、Text函数的作用为:根据制定的数值格式将数值转换为文本。
3、公式:=TEXT(MID(C3,7,8),"00-00-00")中,首先用Mid函数提取C3单元格中从第7位开始,长度为8的字符,然后用Text函数设置成格式为“00-00-00”(暨年月日)的文本。
二、从身份证号码中提取性别。
方法:
在目标单元格中输入公式:=IF(MOD(MID(C3,17,1),2),"男","女")。
解读:
1、Mod函数的作用为:返回两数相除的余数。语法结构为:=Mod(被除数,除数),例如=Mod(6,2),返回值为0;=Mod(3,2),返回值为1。
2、If函数的作用为:判断条件是否成立,如果成立返回一个值,否则返回另外一个值。
3、公式:=IF(MOD(MID(C3,17,1),2),"男","女")中,首先利用Mid函数提取C3单元格中字符串的第17位,然后除以2,返回余数(暨Mod函数的作用,其返回的结构只有0和1两种),最后用If函数判断余数,如果为“1”,返回“男”,如果为“0”,返回“女”。
三、从身份证号码中提取年龄。
方法:
在目标单元格中输入公式:=DATEDIF(D3,TODAY(),"y")。
解读:
1、Datedif函数是系统隐藏函数,其作用为按照指定的类型计算两个日期之间的差值。语法结构为:=Datedif(开始日期,结束日期,统计方式),常见的“统计方式”有:“Y”、“M”、“D”;分别为“年”、“月”、“日”。
2、Today()函数的作用为获取当天的日期。
四、用身份证号码计算退休年龄。
方法:
在目标单元格中输入公式:=EDATE(D3,MOD(MID(C3,17,1),2)*120+600)。
解读:
1、Edate函数的作用为返回指定日期之前或之后X月的日期。语法结构为:=Edate(指定日期,月份)。
2、公式:=EDATE(D3,MOD(MID(C3,17,1),2)*120+600)中,首先用判断性别,如果为“男”性,则公式为:=Edate(D3,1*120+600),暨从出生日期算起之后的720个月(暨60年)的日期;如果为“女性”,则公式为:=Edate(D3,0*120+600),暨从出生日期算起之后的600个月(暨50年)的日期。
五、判断身份证号是否重复。
1、常规操作(错误办法)。
方法:
在目标单元格中输入公式:=IF(COUNTIF($C$3:$C$9,C3)>1,"重复","")。
解读:
1、Countif函数是单条件计数函数,其语法结构为:=Countif(条件范围,条件)。
2、利用Countif函数统计出当前值在C3:C9范围内数量,紧接着和1进行比较,并用If函数来判断,如果比较的结果成立,则返回“重复”,否则返回空值。
3、从单元格值中可以看出,两个身份证号并不重复,但是返回的结果为“重复”,Why?因为在Excel中的数字的有效位数为15位,超过15位的全部按“0”处理。而上述的两个号码中只有最后两位不同,故被Excel作为“0”处理,因此判断的结果为“重复”。
2、正确做法。
方法:
在目标单元格中输入公式:=IF(COUNTIF(C$3:C$9,C3&"*")>1,"重复","")。
解读:
1、此公式和“常规操作”的公式比较,只是在C3后添加了&"*",但能得到正确的结果,Why?
2、“*”在Excel中被称为通配符,起作用就是将当前的数字强制转换为文本,然后进行比较,从而得到了正确的结果。
六、防止身份证号重复。
方法:
1、选定目标单元格。
2、【数据】-【数据验证】,选择【允许】中的【自定义】,并在【公式】中输入:=COUNTIF(C$3:C$9,C3)=1。
3、完善提示信息并【确定】。
以上是关于C语言程序设计:写一个函数,从给定的身份证号中提取出生年月日的主要内容,如果未能解决你的问题,请参考以下文章
EXCEL表格中 怎么用函数从身份证号获取出生日期,年龄、性别