C++这个程序怎么写

img

                                       7368:身份证的编码问题
                                   
描述
 中国大陆居民导份证号码由18位数字组成:第16位的数字为地址代码,表示某省某市某区或县:第714位的数字代表
 居民的出生年月日:第1517位的数字代表同一辖区内、同年同月同日出生的顺序号,其中第17位数字表示性别,奇数
 为男性,偶数为女性;第18位数字代表校验码。校验码是0~10这十个数字中的任意一个,其中10用X表示
 校验码的计算方法如下:
 1将身份证号码的前17位数学分别乘以对应的条数。对应关系如下:
                 号码位1234567 8 91011121314151617
                 系数7910584216379105842
 217位数字和系数相乘的结果累计求和:
 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");
}