Java 身份证号码升级

问题描述

从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
数据规模和约定
不用判断输入的

代码:

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String []a = new String[18];
        for (int i =0 ;i<6;i++){
            a[i] = s.substring(i,i+1);
        }
        a[6] = "1";
        a[7] = "9";
        for (int i = 8;i<17;i++){
            a[i] = s.substring(i-2,i-1);
        }
        int x = (Integer.parseInt(a[0])*7+Integer.parseInt(a[1])*9
                +Integer.parseInt(a[2])*10+Integer.parseInt(a[3])*5
                +Integer.parseInt(a[4])*8+Integer.parseInt(a[5])*4
                +Integer.parseInt(a[6])*2+Integer.parseInt(a[7])*1
                +Integer.parseInt(a[8])*6+Integer.parseInt(a[9])*3
                +Integer.parseInt(a[10])*7+Integer.parseInt(a[11])*9
                +Integer.parseInt(a[12])*10+Integer.parseInt(a[13])*5
                +Integer.parseInt(a[14])*8+Integer.parseInt(a[15])*4
                +Integer.parseInt(a[16])*2)%11;
        switch (x){
            case 0:
                a[17] = "1";
                break;
            case 1:
                a[17] = "0";
                break;
            case 2:
                a[17] = "x";
                break;
            case 3:
                a[17] = "9";
                break;
            case 4:
                a[17] = "8";
                break;
            case 5:
                a[17] = "7";
                break;
            case 6:
                a[17] = "6";
                break;
            case 7:
                a[17] = "5";
                break;
            case 8:
                a[17] = "4";
                break;
            case 9:
                a[17] = "3";
                break;
            case 10:
                a[17] = "2";
                break;
        }
        for (int i =0;i<18;i++){
            System.out.print(a[i]);
        }
    }
}

版权声明:本文为a215012954原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。