练习 4. 身份证号码校验¶
题目描述¶
中国二代身份证号码有 18 位,其中前 17 位表示了某些信息(省份、城市、出生日期等等),最后一位是校验码。校验码是由前面的 17 位(记为\(D_i\))计算得来的(ISO 7064:1983, MOD 11-2)。
按照上面的计算方法,身份证的 18 位数字应该满足
\[
\left(\sum_{i = 1}^{18} D_i \times 2^{i - 1}\right) \mathrm{mod}\ 11 = 1
\]
也可以按照附录中的方式,在经过一定的数学推导之后直接给出根据前 17 位计算校验位的公式。
输入¶
一行,18 位的身份证号码。
输出¶
一行,如果校验通过,则为 Yes,如果校验不通过,则输出根据前 17 位计算出的正确校验位。
样例输入¶
370683198901117657
样例输出¶
Yes
样例输入¶
533223196301050915
样例输出¶
7
提示¶
经过数学推导,具体的计算方法是:
\[
S = \sum_{i = 1}^{17} D_i W_i
\]
| \(k\) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| \(W_k\) | 7 | 9 | 10 | 5 | 8 | 4 | 2 | 1 | 6 | 3 | 7 | 9 | 10 | 5 | 8 | 4 | 2 |
然后再将 \(S\) 换算为校验位 \(H\):
| \(S\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| \(H\) | 1 | 0 | X | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |