计算身份证号校验码

0AND1STORY

2019-06-03 13:27:38

Personal

在[讲解正则表达式的日报](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; } ```