c语言输出身份证号后四位
c语言输出身份证号后四位可以使用把字符串分割成数组的方法。
将身份证字符串的后四位切分为一个单独的数组,然后输出这个数组就可以了。
C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。
身份证号定义成什么类型 C语言
身份证位数有18位, 末尾有可能为X, 且一般来说不会参与数学计算, 所以定义为字符串类型最好, 如在MFC中, 定义为CString类型, 字符串类型对于该身份证提取生日等信息很方便.
C语言高手来帮帮忙了,将15为身份证号转化为18位
#include “stdio.h”
#include “string.h”
void ChangeID(char src[], char dest[]);
void main()
{
char src[80];
char dest[80];
while (true)
{
printf(“请输入15位身份证号码:\n”);
scanf(“%s”, src);
bool bValid = true;
if (strlen(src)!=15)
bValid = false;
else
{
for (long k=0; k15; k++)
{
if (src[k]’0′ || src[k]’9′)
{
bValid = false;
break;
}
}
}
if (! bValid)
{
printf(“输入号码不正确。\n”);
}else
{
ChangeID(src, dest);
printf(“修改后的身份证号码(18位):\n%s\n”, dest);
}
printf(“\n是否继续?(Y/N)\n”);
char answer[80];
scanf(“%s”, answer);
if (answer[0]!=’y’ answer[0]!=’Y’)
break;
}
}
void ChangeID(char src[], char dest[])
{
const long weight[17] = {
7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2
};
const char pEnd[12] = “10X98765432”;
long data[17];
long k;
for (k=0; k6; k++)
data[k] = src[k]-‘0’;
// 把字符转换为真正的数字值。
long nYear = (src[6]-‘0’)*10 + (src[7]-‘0’);
// 计算年的后2位。如果是09, 认为是2000~2009
// 否则认为是 1910~1999
// 对于很老的人可能会出错,没有办法,千年虫。
if (nYear9)
{
// 填入19
data[6] = 1;
data[7] = 9;
}else
{
data[6] = 2;
data[7] = 0;
}
for (k=8; k17; k++)
data[k] = src[k-2]-‘0’;
long nSum=0;
for (k=0; k17; k++)
nSum += data[k]*weight[k];
long tail = nSum%11;
//写回目标字符串,注意最后一位要查表写入。
for (k=0; k17; k++)
dest[k] = data[k]+’0′;
dest[17] = pEnd[tail];
dest[18] = ‘\0’;
}
试了我自己的身份证,结果正确。
“根据索引6 对应的校验码位7”
不对,应该是从0开始数,对应的码是6.
执行结果:
请输入15位身份证号码:
510212711215041
修改后的身份证号码(18位):
510212197112150416
身份证号求省份的c语言
根据身份证号前两位判断即可。
写一个数组, 存身份证号前两位对应的省,这个网上查一下就可以找到
然后输入身份证号,计算前两位,到数组中查,输出对应省份名。
#include stdio.h
#include string.h
char *map[50][2] ={{“11″,”北京”},{“12″,”天津”},{“13″,”河北”},{“14″,”山西”},{“15″,”内蒙古”}};
//全国各省都有一个独立编号 我这边只写了五个,你可以加齐。
int main()
{
char id[30];
char p[3]=””;
int i;
scanf(“%s”,id);
p[0] = id[0];
p[1] = id[1];
for(i = 0; i 50; i ++)
if(strcmp(p, map[i][0]) == 0) break;
if(i50) printf(“%s\n”, map[i][1]);
else printf(“Not found\n”);
return 0;
}
C语言:输入身份证号码,输出出生年和该年是否为闰年,并计算多少岁。咋编程?
代码文本:
#include “stdio.h”
#include “time.h”
int main(int argc,char *argv[]){
char s[19];
int y,t,ty;
time_t lt;
printf(“Please enter your ID number…\n”);
if(scanf(“%18s”,s)==1){
for(t=0;s[t];t++);
if(t==18){
for(t=0;s[t];t++)
if((s[t]’0′ || s[t]’9′) (s[17]0xDF)!=’X’){
printf(“Input error, exit…\n”);
return 0;
}
sscanf(s+6,”%4d”,y);
printf(“\nThe year %d you were born is “,y);
if(!(y%4==0 y%100 || y%400==0))
printf(“not “);
ty=localtime((lt=time(NULL)))-tm_year+1900-y;
printf(“a leap year.\nYou’re %d year(s) old…\n”,ty);
}
else
printf(“Input error, exit…\n”);
}
else
printf(“Input failed, exit…\n”);
return 0;
}