C++查验身份证号码有效性,和过程

给一个18位身份证号码,验证有效性,并输出有问题的号码,如果没问题,就输出all passed

#include <iostream>
using namespace std;
int main()
{
    int n = 0, sum = 0, mod = 0, count = 0;
    int w[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
    char m[11] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
    cin >> n;
    string numbers[n];
    for (int i = 0; i < n; i++)
    {
        cin >> numbers[i];
    }
    for (int j = 0; j < n; j++)
    {
        string str1 = numbers[j];
        for (int k = 0; k < 17; k++)
        {
            if(str1[k]=='X')
            {
                cout << str1 << endl;
                count++;
                break;
            }
            else
            sum = sum + (str1[k] - 48) * w[k];
        }
        mod = sum % 11;
        sum = 0;
        if (m[mod] != str1[17])
        {
            cout << str1 << endl;
            count++;
        }
    }
    if (count == 0)
        cout << "All passed";
}

验证规则是什么呢?

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632