试题 算法提高 身份证号码升级
问题描述
从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××年
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"); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)