必对题解·身份证验证
2026-09-19 17:38:29
发布于:天津
9阅读
0回复
0点赞
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int a[20]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//用a数组存储权重值
int main(){
string s;
cin>>s;
int ans=0;//ans存储最终值
for(int i=0;i<17;i++){
int n=s[i]-'0';//这里不需要特殊处理‘X’因为‘X’-‘0’得到40,40对11取余和10对11取余答案相同
ans=(ans+n*a[i])%11;//边累加,边取余
}
string M="10X98765432";//校验码M
if(s[17]==M[ans])cout<<"Yes";//如果校验码正确,则输出Yes
else cout<<"No";//否则输出No
return 0;
}
全部评论 1
#include <iostream>
#include <string>
using namespace std;
int main() {
string id;
cin >> id;
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'};
int sum = 0;
bool ok = true;
for (int i = 0; i < 17; i++) {
if (id[i] < '0' || id[i] > '9') {
ok = false;
break;
}
sum += (id[i] - '0') * w[i];
}
if (ok && m[sum % 11] == id[17]) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}2026-09-20 来自 贵州
0









有帮助,赞一个