#include<stdio.h> #include<string.h> #include<stdlib.h> char * zhuan(char* ss) { char temp[19] = {0}; printf("strlen(ss)=%d\n",strlen(ss)); for (int i = 0; i < strlen(ss); i++) { if (i < 6) temp[i] = ss[i]; else { temp[i+2] = ss[i]; } } temp[6] = '1'; temp[7] = '9'; printf("temp=%s\n",temp); int num[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; //计算总值 char x[12] = { '1','0','X','9','8','7','6','5','4','3','2','\0'}; int sum = 0; for (int i = 0; i < 17; i++) { sum += (temp[i] - '0')* num[i]; } ss[17] = x[sum % 11]; ss[18] = '\0'; return temp; } void dayin(char* ss) { printf("\n转换后的id是%s",ss); } int main() { char ss[19] = {0}; printf("input idcard\n"); scanf_s("%s",ss,19); char *res=zhuan(ss); dayin(res); //printf("\n转换后的id是%s", res); return 0; }
时间: 2024-04-29 21:21:04 浏览: 65
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码实现了一个身份证号码的转换和校验功能。具体来说,它将输入的身份证号码(字符串类型)中的前六位和后面的十一位分别存储到一个 char 类型的数组 temp 中,并在第七、八位插入了 "19" 两个字符。然后根据国家标准规定的身份证号码校验码计算方法,结合 temp 中的前十七位数字,计算出校验码并将其存储到输入的身份证号码字符串的第十八位。最后,将转换后的身份证号码和校验结果打印出来。
需要注意的是,这段代码中存在一些问题,比如没有对输入的身份证号码进行有效性检查,没有考虑到身份证号码中可能存在字母等非数字字符,以及没有对输入的字符串进行越界检查等。如果要在实际应用中使用,需要对代码进行进一步完善。
阅读全文