
7368:身份证的编码问题
描述
中国大陆居民导份证号码由18位数字组成:第1至6位的数字为地址代码,表示某省某市某区或县:第7至14位的数字代表
居民的出生年月日:第15至17位的数字代表同一辖区内、同年同月同日出生的顺序号,其中第17位数字表示性别,奇数
为男性,偶数为女性;第18位数字代表校验码。校验码是0~10这十个数字中的任意一个,其中10用X表示
校验码的计算方法如下:
1将身份证号码的前17位数学分别乘以对应的条数。对应关系如下:
号码位1234567 8 91011121314151617
系数7910584216379105842
2将17位数字和系数相乘的结果累计求和:
3用所求的和除以11得到条数
4用余数与导份证号码的最后一位校验码进行对应,对应关条如下:
输入身份证号码,输出出生日期、性别,实现判断最后一位校验码是否正确
输入
输入一行,为其身份证号码
输出
输出第一行为其出生日期,按照YYYY-MM-DD格式
第二行为其性别,如果为男输出”male”,如果为女输出female”
第三行为验证码是否正确,若正确输出“True,否则输出False”
样例输入
339005200208086214
样例输出
2002-08-08
ma1e
True
#include<bits/stdc++.h>
using namespace std;
int main() {
string s;
int c[18]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
int d[11]={1,0,10,9,8,7,6,5,4,3,2};
cin>>s;
cout<<s[6]<<s[7]<<s[8]<<s[9]<<"-"<<s[10]<<s[11]<<"-"<<s[12]<<s[13]<<endl;
int a=s[16]-'0';
if(a%2==0)
{
cout<<"female"<<endl;
}
else
{
cout<<"male"<<endl;
}
int cunt=0;
for(int i=0;i<s.length();i++)
{
int b=s[i]-'0';
cunt+=b*c[i];
}
cunt%=11;
a=s[17]-'0';
if(s[17]=='x') a=10;
if(a==d[cunt])
{
cout<<"true"<<endl;
}
else cout<<"false"<<endl;
}
#include <iostream>
#include <string>
using namespace std;
static char IDEN_CODE[11] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'x' };
static int RATIO[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
string getBirthday(const char* code)
{
char year[5] = { 0 }, month[3] = { 0 }, day[3] = { 0 };
memcpy(year, code + 6, 4);
memcpy(month, code + 10, 2);
memcpy(day, code + 12, 2);
return string(year) + "-" + string(month) + "-" + string(day);
}
string getSex(const char* code)
{
int num = int(code[16] - '0');
return num % 2 != 0 ? "male" : "female";
}
string checkCode(const char* code)
{
int num = 0;
int sum = 0;
for (int i=0; i<17; ++i)
{
num = int(code[i] - '0');
sum += num * RATIO[i];
}
return IDEN_CODE[sum % 11] == code[17] ? "True" : "False";
}
int main()
{
char code[1024] = {0};
do
{
cout << "请输入身份证号:";
cin >> code;
if (strlen(code) != 18){
cout << "输入的身份证号位数不正确,请重新输入!!!\n";
continue;
}
else
{
bool err = false;
for (int i=0; i<17; ++i)
{
if (code[i] < '0' && code[i] > '9')
{
err = true;
break;
}
}
//
if (code[17] != 'x' && code[17] != 'X')
{
if (code[17] < '0' && code[17] > '9') err = true;
}
else
{
code[17] = IDEN_CODE[10];
}
//
if (err)
{
cout << "输入的身份证号格式不正确,请重新输入!!!\n";
continue;
}
}
break;
} while (true);
//
cout << getBirthday(code) << endl;
cout << getSex(code) << endl;
cout << checkCode(code) << endl;
system("pause");
}