题目描述
二代身份证由18位组成,最后一位为校验仪。其计算方法是:前17位分别乘以权重Wi(从左边开始数各位的Wi分别为{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1}),乘积之和除11得余数,再将余数0-10分别转换为{1,0,X,9,8,7,6,5,4,3,2}(即0转换为1,1转换为0,2转换为X,3转换为9……),即为校验位的值。编写程序,输入一个身份证号,计算其检验位的值,与最后一位比较验证其是否正确,若正确输出出生日期,错误则输出“Fail”。
输入
一个身份证号。
输出
若身份证号正确则输出出生日期,错误则输出“Fail”。
样例输入
410108201410310102
样例输出
20141031
代码:
#include <stdio.h>
int a[19] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1};
char b[12] = {'1','0','X','9','8','7','6','5','4','3','2'};
char c[100];
int main()
{
gets(c);
int sum = 0;
for(int i = 0;i < 17;i ++ )
{
sum += a[i] * (c[i] - '0');
}
int s = sum % 11;
if(b[s] == c[17])
{
for(int i = 6;i < 14;i ++ )printf("%c",c[i]);
}
else printf("Fail");
return 0;
}