问题描述
从1999年10月1日开始,公民身份证号码由15位数字增至18位。(18位身份证号码简介)。升级方法为:
1、把15位身份证号码中的年份由2位(7,8位)改为四位。
2、最后添加一位验证码。验证码的计算方案:
将前 17 位分别乘以对应系数 (7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2) 并相加,然后除以 11 取余数,0-10 分别对应 1 0 x 9 8 7 6 5 4 3 2。
请编写一个程序,用户输入15位身份证号码,程序生成18位身份证号码。假设所有要升级的身份证的四位年份都是19××年
输入格式
一个15位的数字串,作为身份证号码
输出格式
一个18位的字符串,作为升级后的身份证号码
样例输入
110105491231002
样例输出
11010519491231002x
数据规模和约定
不用判断输入的15位字符串是否合理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
package adv171; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String id = in.nextLine(); in.close(); int[] idNums = new int[18]; idNums[6] = 1; idNums[7] = 9; for (int i = 0; i < id.length(); i++) { if (i < 6) { idNums[i] = id.charAt(i) - '0'; } else { idNums[i + 2] = id.charAt(i) - '0'; } } int mod = (idNums[0] * 7 + idNums[1] * 9 + idNums[2] * 10 + idNums[3] * 5 + idNums[4] * 8 + idNums[5] * 4 + idNums[6] * 2 + idNums[7] * 1 + idNums[8] * 6 + idNums[9] * 3 + idNums[10] * 7 + idNums[11] * 9 + idNums[12] * 10 + idNums[13] * 5 + idNums[14] * 8 + idNums[15] * 4 + idNums[16] * 2) % 11; switch (mod) { case 0: idNums[17] = 1; break; case 1: idNums[17] = 0; break; case 2: idNums[17] = -1; break; case 3: idNums[17] = 9; break; case 4: idNums[17] = 8; break; case 5: idNums[17] = 7; break; case 6: idNums[17] = 6; break; case 7: idNums[17] = 5; break; case 8: idNums[17] = 4; break; case 9: idNums[17] = 3; break; case 10: idNums[17] = 2; break; } for (int i = 0; i <= 17; i++) { if (i != 17) { System.out.print(idNums[i]); } else { if (idNums[17] == -1) { System.out.print("x"); } else { System.out.print(idNums[17]); } } } } } |
❤ 点击这里 -> 订阅《PAT | 蓝桥 | LeetCode学习路径 & 刷题经验》by 柳婼