c语言计算身份证18位
时间: 2023-06-15 19:07:52 浏览: 154
身份证号码是由18位数字和字母组成的,其中最后一位是校验码。校验码是通过前17位号码按照一定的算法计算得出的,用于验证身份证号码的有效性。
以下是使用C语言计算身份证号码校验码的示例代码:
```c
#include<stdio.h>
#include<string.h>
int main()
{
char id[18];
int weight[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; //每一位的权重
char validate[] = "10X98765432"; //校验码对应的值
printf("请输入身份证前17位:");
scanf("%s", id);
int sum = 0;
for(int i = 0; i < 17; i++)
{
sum += (id[i] - '0') * weight[i]; //将每一位数字乘以对应的权重并求和
}
int remainder = sum % 11; //求余数
char check = validate[remainder]; //根据余数查找校验码
printf("身份证号码为:%s%c\n", id, check);
return 0;
}
```
输入身份证前17位,程序会自动计算出校验码并输出完整的身份证号码。需要注意的是,输入的身份证前17位必须都是数字。
相关问题
c语言 计算身份证号码第18位,输入前17位,输出第18位
计算身份证号码最后一位(第18位)的算法如下:
1. 将身份证号码的前17位数字和系数相乘,并求和。
2. 将上一步得到的结果除以11,得到余数。
3. 根据余数,查找对应的校验码。余数为0,校验码为1;余数为1,校验码为0;余数为2,校验码为X;余数为3,校验码为9;余数为4,校验码为8;余数为5,校验码为7;余数为6,校验码为6;余数为7,校验码为5;余数为8,校验码为4;余数为9,校验码为3;余数为10,校验码为2。
下面是用 C 语言实现计算身份证号码最后一位的代码:
```c
#include <stdio.h>
int main()
{
// 定义变量
char id[18];
int factor[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; // 系数
char checkcode[] = "10X98765432"; // 校验码
int sum = 0, remainder, i;
// 输入前17位
printf("请输入身份证号码前17位:");
scanf("%s", id);
// 计算前17位和系数的乘积之和
for (i = 0; i < 17; i++) {
sum += (id[i] - '0') * factor[i];
}
// 计算余数和校验码
remainder = sum % 11;
printf("身份证号码的最后一位为:%c\n", checkcode[remainder]);
return 0;
}
```
程序运行后,输入身份证号码的前17位,即可计算出最后一位的校验码。
c语言根据身份证号计算年龄
要根据身份证号计算年龄,需要先提取出身份证号中的出生年月日信息,然后用当前日期减去出生日期,就可以得到年龄。
以下是一个简单的 C 语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int get_age(char* id_number) {
// 提取出生年月日信息
int year = atoi(strncpy((char*)malloc(5), id_number+6, 4));
int month = atoi(strncpy((char*)malloc(3), id_number+10, 2));
int day = atoi(strncpy((char*)malloc(3), id_number+12, 2));
// 获取当前日期
time_t t = time(NULL);
struct tm *now = localtime(&t);
int current_year = now->tm_year + 1900;
int current_month = now->tm_mon + 1;
int current_day = now->tm_mday;
// 计算年龄
int age = current_year - year;
if (current_month < month || (current_month == month && current_day < day)) {
age--;
}
return age;
}
int main() {
char* id_number = "110101200001010011";
int age = get_age(id_number);
printf("年龄:%d\n", age);
return 0;
}
```
这个代码示例中,我们使用了 `atoi` 函数将字符串转换为整数,`strncpy` 函数从身份证号中提取出出生年月日信息,并且使用了系统库中的 `time` 函数来获取当前日期。最后计算年龄时,注意要判断当前是否已过生日,如果未过生日则年龄减一。