//这个程序 不是很完整 主要作用就是输入身份证号,判断身份证号是否合法 (只需要看够不够十八位,尾数是数字或者x)如果合法 输出出生年月日 性别 年龄 现在这个程序 判断尾数那有问题 计算年龄没写出来 能不能帮优化一下 把没写的写上 有错的地方改一下
package com;
import java.util.*;
public class ID {
private static Scanner scanner;
// 入口
public static void main(String[] args) {
scanner = new Scanner(System.in);
System.out.println("请输入您的身份证号:");
String idNumber = scanner.nextLine();
// 判断身份证号是否合法
Boolean idLegit = judgeId(idNumber);
if(idLegit){
String birthday = getBirthday(getStr(idNumber,6,13));
String gender = getGender(getStr(idNumber,16,16));
String age = getAge(getStr(idNumber,6,9));
System.out.println("您的生日:" + birthday);
System.out.println("您的性别:" + gender);
System.out.println("您的年龄:" + age);
}else System.out.println("身份证号有误!!!!");
}
//判定身份证号是否正确 正确的为18位 末尾为数字或者字母x
public static Boolean judgeId(String id){
if(id.length() != 18)
return false;
char[] end = {'1','2','3','4','5','6','7','8','9','0','x'};
boolean sum = true;
for(int i =0;i<end.length;i++){
if(end[i] != getStr(id,17, 17).charAt(0)){
sum = true;
}else{
sum = false;
}
}
return sum;
}
public static String getStr(String str,int a,int b){
b++;
return str.substring(a,b);
}
//提取出生年月日
public static String getBirthday(String num){
String y = getStr(num,0,3);
String m = getStr(num,4,5);
String d = getStr(num,6,7);
return y + "-" + m + "-" + d;
}
//判断性别
public static String getGender(String num){
int gendetNum = num.charAt(0) - '0';
return gendetNum % 2 == 0 ? "女" : "男";
}
//计算年龄,这个代码不完整
public static String getAge(String num){
String age = getStr(num,0,3);
int new_age = Integer.valueOf(age);// 强制转换
Calendar date = Calendar.getInstance();
String year = String.valueOf(date.get(Calendar.YEAR));
int new_year = Integer.valueOf(year);
return age;
}
}
这个程序有毛病 具体在程序最上方有说明
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
- Winson.J 2021-10-29 17:27关注
- judgeId()方法是不正确的,只要最后一位不是x,前面17随便输都返回true
- 比较的逻辑也不对,每次都比最后一位,前面的17位都没有检查
只改了检查身份证号和计算年龄的代码
身份证数字含义参考
// 判定身份证号是否正确 正确的为18位 末尾为数字或者字母x public static Boolean judgeId(String id) { if (id.length() != 18) return false; //取尾数检查是不是数字或者x char lastChar = id.charAt(id.length() - 1); if( ! (lastChar >= '0' && lastChar <= '9')//最后一位不是数字 && lastChar != 'x' //最后一位不是小写x && lastChar != 'X' //最后一位不是大写X ){ return false; } //遍历检查前面17个是不是数字 for (int i = 0; i < id.length() - 1; i++) { char tmp = id.charAt(i); if(tmp < '0' || tmp > '9'){ //不是数字 return false; } } return true; } // 计算年龄,这个代码不完整 // 这里假定年份合法 // 年龄 = 当前年份 - 身份证年份 public static String getAge(String num) { //传进来的参数是截好的年份,不用再截了, //第23行截的不正确应该是6,10 //6-10包括6不包括10,正好6,7,8,9截4位,你的代码截取字符串后面都少一个 //String birthdayYear = getStr(num, 6, 10); //出生年份 int id_year = Integer.valueOf(num);// 强制转换 Calendar c = Calendar.getInstance(); //当前年份 int currYear = c.get(Calendar.YEAR); int age = currYear - id_year; return age + "";//int转字符串, }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥17 pro*C预编译“闪回查询”报错SCN不能识别
- ¥15 微信会员卡接入微信支付商户号收款
- ¥15 如何获取烟草零售终端数据
- ¥15 数学建模招标中位数问题
- ¥15 phython路径名过长报错 不知道什么问题
- ¥15 深度学习中模型转换该怎么实现
- ¥15 HLs设计手写数字识别程序编译通不过
- ¥15 Stata外部命令安装问题求帮助!
- ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
- ¥15 TYPCE母转母,插入认方向