c++批量输入身份证号输出年龄
时间: 2024-12-01 22:19:41 浏览: 45
在C++中,批量处理身份证号码并计算年龄通常涉及字符串处理、正则表达式以及日期计算。首先,你需要确保用户输入的是有效的中国大陆18位身份证号码,然后通过身份证号码的第7位到第14位确定出生日期,最后从当前日期减去这个出生日期得到年龄。
下面是一个简单的示例代码片段,展示了如何实现基本的功能:
```cpp
#include <iostream>
#include <regex>
#include <chrono>
// 计算两个时间点之间的年份差
int yearsBetween(int year1, int month1, int day1, int year2, int month2, int day2) {
auto y1 = std::chrono::year{year1};
auto m1 = std::chrono::month_day(month1, day1);
auto y2 = std::chrono::year{year2};
auto m2 = std::chrono::month_day(month2, day2);
return std::chrono::duration_cast<std::chrono::years>(y2 - y1).count() +
(m2.is_leap_year() && m1.month() == 2 && m1.day() > 29 ? -1 : 0);
}
bool isValidID(std::string id) {
std::regex regex_18digits(R"(\d{6}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)(\d{3})$)");
return regex_18digits.match(id);
}
int main() {
std::vector<std::string> ids;
// 假设这里有一个函数用于读取身份证号码列表
for (std::string id : readIDs()) {
if (isValidID(id)) {
int year = id.substr(6, 4) - 1900; // 减去1900获取出生年份
int month = stoi(id.substr(10, 2));
int day = stoi(id.substr(12, 2));
int currentYear = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()).time_since_epoch().count() / (60 * 60 * 24 * 365); // 当前年份
int age = yearsBetween(year, month, day, currentYear, 1, 1); // 使用当前日期
std::cout << "身份证号: " << id << ", 年龄: " << age << "岁\n";
} else {
std::cerr << "无效的身份证号: " << id << "\n";
}
}
return 0;
}
```
注意:上述代码假设`readIDs()`是一个虚构的函数,实际应用中需要替换为实际读取身份证号码的函数。同时,这只是一个基础示例,真实环境中还需要考虑更多的边界情况和错误处理。
阅读全文