计算身份证号校验码
0AND1STORY
2019-06-03 13:27:38
在[讲解正则表达式的日报](https://www.luogu.org/blog/0AND1STORY/zheng-ze-biao-da-shi)里我只讲过如何检验身份证号的格式是否正确,并没有讲如何计算校验码,下面就是通过身份证号的前17位计算第十八位的代码,大家可以借鉴一下:
```cpp
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int w[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
string ID;
int main() {
ios::sync_with_stdio(false);
cin >> ID;
register int sum = 0;
for (register int i = 0; i < ID.size(); i ++)
sum += (ID[i]-'0') * w[i];
ID += (12-sum%11) % 11 == 10 ? 'X' : ((12-sum%11) % 11 + '0');
cout << ID << endl;
return 0;
}
```