1483: 身份证升位

Memory Limit:128 MB Time Limit:1.000 S Judge Style:Text Compare Creator:
Submit:6 Solved:5

Description

现在大家使用的身份证都是18位号码,其实就在几年以前,身份证都是使用的15位号码。

全中国十几亿人都要将15位的身份证号升至18位,工作量之大可想而知。现在假如你回到了身份证升位的时期,当地一个公安局想请你设计一款软件实现自动升位。

升位方法:将原十五位身份证出生年份由原来的2位升至4位(比如81升为1981,假设所有身份证的主人为1900-1999年出生)得到17位身份证码,再根据17位身份证码计算校验码,校验码加至号码尾即得18位身份证号码。

校验码是由十七位身份证码生成,生成方法如下:

校验码公式: V=(∑(ai×Wi)) (mod 11) 2≤i≤18……………………………………(1)

其中, i----表示号码字符从右至左包括校验码在内的位置序号;

ai----表示第i位置上的号码数值;

Wi----示第i位置上的加权因子(其值已定),其数值依据公式Wi=2^(i-1)(mod 11)计算得出,其中x^y表示x的y次幂,x mod y表示x除以y的余数,也就是说,Wi为(2的(i-1)次方)除以11的余数。

以34052419800101001C为例,其中C为校验码。

下面说明如何计算校验码:

计算校验码的编号,位置序号为从右到左包括校验位在内进行计算的。

身份证号:  3   4   0   5   2   4   1   9   8  0  0  1  0  1  0  0  1 C

位置序号:18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2

根据公式(1)进行计算:

V=( 3*(2^(18-1) mod 11)+4*(2^(17-1) mod 11)+...+1*(2^(2-1) mod 11) )  mod 11

  =(21+36+0+25+16+16+2+9+48+0+0+9+0+5+0+0+2) mod 11

  = 2

然后根据计算的结果V=2,查下校验码表得,

校验码对应表

    V的值: 0 1 2 3 4 5 6 7 8 9 10

校验码C: 1 0 X 9 8 7 6 5 4 3 2

查表V=2的校验码为X,所以18位号码为:34052419800101001X

不允许普通用户打印题目,请教师登录后使用。如有疑问请联系管理员!

Input

第一行为一个整数n(0<n≤10000); 接下来n行每行为一个待升位的十五位身份证号;

Output

对于每个待升位的十五位身份证号输出其对应的十八位身份证号。

Sample Input Copy

3
340524800101001
430104891010253
430902871220803

Sample Output Copy

34052419800101001X
430104198910102530
430902198712208036