/ Vijos / 讨论 / 问答 /

c++实名认证(求破解)

任务:不改代码,让程序输出“一些字”
```cpp
#include <iostream>
#include <string>
#include <ctime>
#include <windows.h>

using namespace std;

bool checkID(const string& id) {
// 验证身份证号是否合法
// 这里只做简单的校验,实际应用中可能需要更复杂的算法
if (id.length() != 18) return false;
int sum = 0;
for (int i = 0; i < 17; ++i) {
sum += (i % 2 == 0) ? id[i] - '0' : (id[i] - '0') * 3;
}
int checkDigit = 10 - (sum % 10);
return checkDigit == (id[17] == 'X' || (checkDigit + '0') == id[17]);
}

bool checkPhone(const string& phone) {
// 验证电话号码是否合法
// 这里只做简单的校验,实际应用中可能需要更复杂的算法
if (phone.length() != 11) return false;
for (char digit : phone) {
if (!isdigit(digit)) return false;
}
return true;
}

int main() {
string name;
string id;
string phone;
int year, month, day;

cout << "请输入姓名:" ;
cin >> name;

cout << "输入身份证号:" ;
cin >> id;
if (checkID(id)) {
cout << "身份证验证成功!" << endl;
} else {
cout << "输入有误,请重新输入身份证号!" << endl;
return 0;
}

cout << "输入生日(格式:YYYYMMDD):";
cin >> year >> month >> day;
int age = 2024 - year - ((month < 1 || (month == 1 && day < 1)) ? 1 : 0);
if (age >= 18) {
cout << "输入的年龄合法!" << endl;
} else {
cout << "输入有误,请重新输入年龄!" << endl;
return 0;
}

cout << "输入电话号码:" << endl;
cin>>phone;
if (checkPhone(phone)) {
cout << "电话号码验证成功!" << endl;
} else {
cout << "输入有误,请重新输入电话号码!" << endl;
return 0;
}

cout << "欢迎使用我们的服务!" << endl;
cout << "一些字" << endl;
return 0;
}
```
注释:
身份证号的校验码计算方法如下:

从身份证号的第1位开始,到第17位,依次对这17位数字进行计算。对于这17位中的奇数位置(即第1位、第3位、第5位...第15位),直接将数字相加。对于偶数位置(即第2位、第4位、第6位...第16位),将数字乘以3后再相加。

计算得到的总和(sum)与10取余(sum % 10),得到一个余数。

根据余数计算出校验码。如果余数为0,则校验码为0;如果余数为1,则校验码为1;如果余数为2,则校验码为2;如果余数为3,则校验码为3;以此类推,直到余数为9,则校验码为10。对于校验码为10的情况,实际的身份证号中会用大写字母 'X' 来表示。

最后,将计算出的校验码与身份证号的第18位进行比较。如果相等,则表示身份证号的校验码是正确的,返回 true;如果不相等,则表示身份证号的校验码是错误的,返回 false。

创作一个可以通过的身份证

1 条评论

  • @ 2024-08-10 20:32:15

    代码没加载出来

    #include <iostream>
    #include <string>
    #include <ctime>
    #include <windows.h>
    
    using namespace std;
    
    bool checkID(const string& id) {
        // 验证身份证号是否合法
        // 这里只做简单的校验,实际应用中可能需要更复杂的算法
        if (id.length() != 18) return false;
        int sum = 0;
        for (int i = 0; i < 17; ++i) {
            sum += (i % 2 == 0) ? id[i] - '0' : (id[i] - '0') * 3;
        }
        int checkDigit = 10 - (sum % 10);
        return checkDigit == (id[17] == 'X' || (checkDigit + '0') == id[17]);
    }
    
    bool checkPhone(const string& phone) {
        // 验证电话号码是否合法
        // 这里只做简单的校验,实际应用中可能需要更复杂的算法
        if (phone.length() != 11) return false;
        for (char digit : phone) {
            if (!isdigit(digit)) return false;
        }
        return true;
    }
    
    int main() {
        string name;
        string id;
        string phone;
        int year, month, day;
    
        cout << "请输入姓名:" ;
        cin >> name;
    
        cout << "输入身份证号:" ;
        cin >> id;
        if (checkID(id)) {
            cout << "身份证验证成功!" << endl;
        } else {
            cout << "输入有误,请重新输入身份证号!" << endl;
            return 0;
        }
    
        cout << "输入生日(格式:YYYYMMDD):";
        cin >> year >> month >> day;
        int age = 2024 - year - ((month < 1 || (month == 1 && day < 1)) ? 1 : 0);
        if (age >= 18) {
            cout << "输入的年龄合法!" << endl;
        } else {
            cout << "输入有误,请重新输入年龄!" << endl;
            return 0;
        }
    
        cout << "输入电话号码:" << endl;
        cin>>phone;
        if (checkPhone(phone)) {
            cout << "电话号码验证成功!" << endl;
        } else {
            cout << "输入有误,请重新输入电话号码!" << endl;
            return 0;
        }
    
        cout << "欢迎使用我们的服务!" << endl;
        cout << "一些字" << endl;
        return 0;
    }
    
    
  • 1