试题 算法提高 身份证号码升级

问题描述
  从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 scan=new Scanner(System.in);
        String str=scan.nextLine();
        char arr2[]=str.toCharArray();            //将字符串拆解存放到数组中
        int arr[]=new int[17];
        int arr1[]=new int[17];
        int a=12;
        int sum=0;
        for(int i=0;i<17;i++) {
            if(i==6) {
                arr[i]=1;
            }else if(i==7) {
                arr[i]=9;
            }else if(i>7){
                arr[i]=(int)arr2[i-2]-48;        //转换成
            }else {
                arr[i]=(int)arr2[i]-48;
            }
        }
        for(int i=0;i<17;i++) {
            if(i==0||i==10) {
                arr1[i]=arr[i]*7;
            }else if(i==1||i==11) {
                arr1[i]=arr[i]*9;
            }else if(i==2||i==12) {
                arr1[i]=arr[i]*10;
            }else if(i==3||i==13) {
                arr1[i]=arr[i]*5;
            }else if(i==4||i==14) {
                arr1[i]=arr[i]*8;
            }else if(i==5||i==15) {
                arr1[i]=arr[i]*4;
            }else if(i==6||i==16) {
                arr1[i]=arr[i]*2;
            }else if(i==7) {
                arr1[i]=arr[i]*1;
            }else if(i==8) {
                arr1[i]=arr[i]*6;
            }else if(i==9) {
                arr1[i]=arr[i]*3;
            }
        }
        for(int i=0;i<17;i++) {
            sum=sum+arr1[i];
        }
        System.out.println(sum);
        int ave=sum%11;
        System.out.println(ave);
        if(ave==0) {
            a=1;
        }else if(ave==1){
            a=0;
        }else if(ave==3) {
            a=9;
        }else if(ave==4) {
            a=8;
        }else if(ave==5) {
            a=7;
        }else if(ave==6) {
            a=6;
        }else if(ave==7) {
            a=5;
        }else if(ave==8) {
            a=4;
        }else if(ave==9) {
            a=3;
        }else if(ave==10) {
            a=2;
        }
        for(int i=0;i<17;i++) {
            System.out.print(arr[i]);
        }
        if(a!=12) {
            System.out.print(a);
        }else {
            System.out.print("x");
        }
    }
}
复制代码

 

posted @   抹茶泡芙  阅读(393)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示