C++身份证号校验核对算法
时间: 2024-09-28 13:14:50 浏览: 50
在C++中,对身份证号进行校验可以使用如下的基本算法:
```cpp
#include <string>
// 算法定义
int checkdigit(const std::string& id) {
int sum = 0;
bool odd = false;
// 奇偶校验规则
for (size_t i = 0; i < id.length() - 1; ++i) {
int digit = id[i] - '0'; // 转换为数字
if (odd)
digit *= 2; // 对于奇数位置的数字,需要*2
sum += (digit > 9 ? digit % 11 : digit); // 求和并取模11
odd = !odd; // 切换奇偶性
}
// 得到最后一位校验码
return 11 - (sum % 11);
}
bool verify(const std::string& id) {
int last_digit = id[id.length() - 1] - '0';
int computed_checkdigit = checkdigit(id.substr(0, id.length() - 1)); // 去掉最后一位
return last_digit == computed_checkdigit;
}
```
这里的`checkdigit`函数计算前17位的校验码,`verify`函数则比较计算出的校验码是否与原始的最后一位一致,以此来确认身份证号的合法性。注意,这个算法仅适用于中国18位身份证号码的校验,对于其他地区的身份证号码可能会有所不同。
阅读全文