C++用子串查找的方法获取该身份证号码拥有者的身份信息

题目描述

输入身份证号码,用子串查找的方法获取该身份证号码拥有者的身份信息,包括省市、出生年月日,性别等。要求能判断输入身份证号码是否符合规定,比如:是否是18位,1-17位是否是数字,最后一位是否是0X,1112位合起来不能大于12,13~14位合起来不能大于31或者30,29,28(即符合每月最大日期)。

输入形式

以字符串的形式输入一个身份证号码

输出形式

如果身份证号码不符合规定,提示身份证信息错误,若符合规定,则输出该身份证号码拥有者的信息,即省市、出生年月日,性别。

源代码

#include <iostream>
#include <string>
using namespace std;

bool isValidID(string id) {
    // 判断身份证号码是否符合规定
    if (id.length() != 18) {
        return false;
    }
    for (int i = 0; i < 17; i++) {
        if (!isdigit(id[i])) {
            return false;
        }
    }
    if (!(id[17] == 'X' || id[17] == 'x' || isdigit(id[17]))) {
        return false;
    }
    int month = stoi(id.substr(10, 2));
    int day = stoi(id.substr(12, 2));
    if (month < 1 || month > 12 || day < 1 || day > 31) {
        return false;
    }
    if ((month == 4 || month == 6 || month == 9 || month == 11) && day > 30) {
        return false;
    }
    if (month == 2) {
        int year = stoi(id.substr(6, 4));
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
            if (day > 29) {
                return false;
            }
        } else {
            if (day > 28) {
                return false;
            }
        }
    }
    return true;
}

void getIDInfo(string id) {
    // 获取身份证号码拥有者的信息
    string province = id.substr(0, 2);
    string birthday = id.substr(6, 8);
    string gender;
    if (id[16] % 2 == 0) {
        gender = "女";
    } else {
        gender = "男";
    }
    cout << "省市:" << province << endl;
    cout << "出生年月日:" << birthday << endl;
    cout << "性别:" << gender << endl;
}

int main() {
    string id;
    while (cin >> id) {
        if (!isValidID(id)) {
            cout << "身份证信息错误" << endl;
        } else {
            getIDInfo(id);
        }
    }
    return 0;
}

在这个问题中,我们首先定义了一个函数isValidID,用于判断输入的身份证号码是否符合规定。函数中,我们通过一系列的条件判断来验证身份证号码的合法性,包括长度为18位、前17位都是数字、最后一位是数字或者大写字母X、月份和日期的范围等。

接下来,我们定义了一个函数getIDInfo,用于获取身份证号码拥有者的信息。函数中,我们使用substr函数从身份证号码中提取省市、出生年月日和性别信息,并将其输出。

在主函数中,我们使用循环读取输入的身份证号码,并根据isValidID函数的返回值判断输入的身份证号码是否符合规定。如果不符合规定,则输出错误信息;如果符合规定,则调用getIDInfo函数获取身份证拥有者的信息,并输出。

注意:题目要求输入多组数据,因此使用了一个while循环来不断读取输入并进行处理。

© 版权声明
THE END
喜欢就支持一下吧
点赞14赞赏 分享