c++写程序:一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17位数字加权求和权重分配为:7910584216379105842;然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:Z:0 1 2 3 4 5 6 7 8 9 10M:1 0 X 9 8 7 6 5 4 3 2现在给定一些身份证号码请你验证校验码的有效性并输
#include <iostream>
#include <string>
using namespace std;
int main() {
int N;
cin >> N;
string id[N];
for (int i = 0; i < N; i++) {
cin >> id[i];
}
string M = "10X98765432";
bool allPassed = true;
for (int i = 0; i < N; i++) {
string s = id[i];
int sum = 0;
for (int j = 0; j < 17; j++) {
if (s[j] >= '0' && s[j] <= '9') {
sum += (s[j] - '0') * (7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)[j];
} else {
allPassed = false;
cout << s << endl;
break;
}
}
if (allPassed) {
int Z = sum % 11;
if (s[17] != M[Z]) {
allPassed = false;
cout << s << endl;
}
}
}
if (allPassed) {
cout << "All passed" << endl;
}
return 0;
}
``
原文地址: https://www.cveoy.top/t/topic/hQsj 著作权归作者所有。请勿转载和采集!