c++ Qt 效验身份证号码 代码
时间: 2023-09-10 09:08:48 浏览: 146
以下是一个基于 Qt 的身份证号码验证代码:
```cpp
QString idNumber = "110101199003077156"; // 身份证号码
QRegExp regExp("^(\\d{17})(\\d|[xX])$"); // 正则表达式匹配规则
if(regExp.exactMatch(idNumber)) { // 如果匹配成功
int factors[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; // 加权因子
char checkCodes[11] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'}; // 校验码
int sum = 0; // 加权和
for(int i = 0; i < 17; i++) {
sum += (idNumber.at(i).digitValue() * factors[i]); // 乘以加权因子并求和
}
int remainder = sum % 11; // 模11取余
QChar checkCode = checkCodes[remainder]; // 根据余数获取校验码
if(checkCode.toUpper() == idNumber.at(17).toUpper()) { // 校验码匹配成功
qDebug() << "身份证号码验证通过";
} else {
qDebug() << "身份证号码校验码错误";
}
} else {
qDebug() << "身份证号码格式错误";
}
```
这个代码首先使用正则表达式 `^(\\d{17})(\\d|[xX])$` 来匹配身份证号码的格式,如果格式匹配成功,就继续进行验证。验证的过程是根据身份证号码的前17位数字乘以对应的加权因子(加权因子从左到右依次为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2),然后将乘积求和并对11取余得到一个余数,再根据这个余数从预先定义的校验码数组中获取一个校验码,最后将这个校验码和身份证号码的最后一位进行比较,如果相同就认为身份证号码验证通过,否则就认为校验码错误。