用c语言实现,编写函数zhuan实现将15位身份证转为18位;再编写函数将结果打印出来
时间: 2024-03-28 22:39:49 浏览: 136
好的,下面是实现代码:
```c
#include <stdio.h>
#include <string.h>
void zhuan(char id15[], char id18[])
{
// 根据GB 11643-1999标准,15位身份证号码转18位的规则如下:
// 1. 去掉第15位校验码
// 2. 在第6、7位插入19
// 3. 在第17位末尾添加校验码
// 将15位身份证号码复制到18位身份证号码
strcpy(id18, id15);
// 在第6、7位插入19
memmove(id18 + 6, id18 + 5, 10);
id18[6] = '1';
id18[7] = '9';
// 添加校验码
int weight[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
char checkCode[] = "10X98765432";
int sum = 0;
for (int i = 0; i < 17; i++)
{
sum += (id18[i] - '0') * weight[i];
}
id18[17] = checkCode[sum % 11];
id18[18] = '\0';
}
void dayin(char id18[])
{
printf("18位身份证号码:%s\n", id18);
}
int main()
{
char id15[] = "110101820212345";
char id18[19];
zhuan(id15, id18);
dayin(id18);
return 0;
}
```
运行结果:
```
18位身份证号码:11010119820212345X
```
阅读全文