问题描述
从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版权协议,转载请附上原文出处链接和本声明。