工具身份证号校验器本页总览身份证号校验器 参考资料 公民身份号码 - 维基百科 原理 将身份证号码从左至右标记为 a1,a2,⋯ ,a18a_1,a_2,\cdots,a_{18}a1,a2,⋯,a18(a18a_{18}a18 即为校验码) 计算权重系数 wi=218−i mod 11w_i=2^{18-i}\bmod 11wi=218−imod11 iii111222333444555666777888999101010111111121212131313141414151515161616171717181818wiw_iwi777999101010555888444222111666333777999101010555888444222111 计算 s=∑i=117ai⋅wis=\sum_{i=1}^{17}a_i\cdot w_is=∑i=117ai⋅wi a18=(12−s mod 11) mod 11a_{18}=(12-s\bmod 11)\bmod 11a18=(12−smod11)mod11 代码 #include <bits/stdc++.h>using namespace std;int main(){ string s; cin>>s; int sum=0; for(int i=0;i<17;i++)sum+=s[i]-'0'<<17-i; int num=(12-sum%11)%11; cout<<(char)(num==10?'X':'0'+num)<<'\n'; return 0;}