用c语言输入一个18位身份证号,输出其性别和年龄(用2022减去出生年份即可,不用考虑具体的月份);若输入身份证号长度不正确,则输出“身份证号不正确”。
时间: 2024-12-22 11:18:32 浏览: 9
在C语言中,处理身份证号码涉及到一些特定的规则,如前六位表示地区码,接下来八位代表出生日期,最后四位是校验码。要实现这个功能,你需要编写一些函数来解析并验证身份证号码。以下是一个简单的示例,假设出生日期的月份和日子都被忽略了:
```c
#include <stdio.h>
#include <string.h>
// 假设中国的身份证号是18位
#define ID_LENGTH 18
int check_id_length(char* id) {
if (strlen(id) != ID_LENGTH) {
printf("身份证号不正确\n");
return -1;
}
return 0;
}
void get_gender_and_age(int year_of_birth) {
int current_year = 2022;
int age = current_year - year_of_birth;
// 根据身份证第17位(奇数表示男性,偶数表示女性)
char gender = id[ID_LENGTH - 1] & 1; // 取最后一位的二进制值判断性别
gender ? printf("男") : printf("女");
printf(", 年龄: %d岁", age);
}
int main() {
char id[ID_LENGTH];
printf("请输入18位身份证号码: ");
fgets(id, sizeof(id), stdin); // 读取用户输入
id[strlen(id) - 1] = '\0'; // 去除换行符
if (check_id_length(id)) return 0;
int year_of_birth = ((id[6] - '0') * 10 + id[7]) * 10 + id[8]; // 提取出生年份
get_gender_and_age(year_of_birth);
return 0;
}
```
注意这只是一个简化版本,实际的身份证号码校验需要更复杂的算法,包括校验码的计算等。上述代码仅用于演示基本的输入和信息提取。
阅读全文