跳转至

练习 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