A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Tesla时光 中级黑马   /  2012-9-11 23:18  /  1283 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 翁发达 于 2012-9-12 12:08 编辑

要求输入一个身份证号,然后打印出生年月日,打印出来的格式是:xxxx年xx月xx日.并要得到年月日累加的和.
我的思路是:
先判断这个身份证长度是否正确,用String类的length方法
再将这个身份证的年月日截取出来,用substring();
然后再折分,用三个变量接收,然后加上"年""月""日"打印
接下来累加年月日就把我难住了,我得到的是不确定的字符串,
一加的结果乱其八糟,我都看不懂,请问正确的要怎么实现?
还有个问题,外一有不小心输入了字母怎么办?
那我们要验证这个身份证是否有非法字符?这个代码该怎么实现?

import java.util.Scanner;
class Test1
{
public static void main(String[] args)
{
  Scanner can=new Scanner(System.in);
  System.out.println("请输入身份证号");
  String id=can.nextLine();
  
  if(StringTools.checkLength(id)){
   String birthday=StringTools.getBirthday(id);
   StringTools.print(birthday);
  }else{
   System.out.println("身份证长度不正确");
  }
}
}
//将得到的birthday 按照指定格式输出
class StringTools
{
public static void print(String birthday){
  
  String year="";
  String month="";
  String day="";
   year=birthday.substring(0,4);
   month=birthday.substring(4,6);
   day=birthday.substring(6);
  System.out.println(year+"年"+month+"月"+day+"日");
}
//判断身份证号长度是否正确
public static boolean checkLength(String id){
  
  return id.length()==18;
}
//得到身份证中的年月日
public static String getBirthday(String id){
   return id.substring(6,14);
  }
}

3 个回复

倒序浏览
累加可以强转成int类型:

上面得到的String类型的year,通过int y = Integer.Int(year);得到int类型,然后就能相加了。

非法字符可以通过ASCII码来限制,0到9的ASCII码是48到57,如果超出这个范围就是非法字符。

我能想到的办法是用for循环来按字符输入,逐个判断ASCII码值,然后存储到char[]字符数组中,利用角标打印年月日。

再把char转成int型,求和。或者直接利用ASCII码差值求和。比如年份是abcd,那就是1000*(a-48)+100*(b-48)+10*(c-48)+(d-48)。
回复 使用道具 举报
  1. import java.util.Scanner;


  2. public class Test {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 System.out.println("请输入18位的身份证号码:");
  9.                 Scanner sc = new Scanner(System.in);               
  10.                 String id = sc.nextLine();
  11.                 boolean b = checkID(id);
  12.                 if(b){
  13.                         getBirthday(id);
  14.                 }else{
  15.                         System.out.println("身份证号码有误");
  16.                 }
  17.         }
  18.        
  19.         //这里粗劣的判断一下身份证的合法性,还可以更加准确一点,对年月日也进行判断一下
  20.         public static boolean checkID(String id){
  21.                 String reg = "\\d{17}[\\dxX]";
  22.                 boolean b = id.matches(reg);
  23.                 return b;
  24.         }
  25.        
  26.         public static void getBirthday(String id){
  27.                 String year,month,date;
  28.                 year = id.substring(6, 10);
  29.                 month = id.substring(10, 12);
  30.                 date = id.substring(12, 14);
  31.                 System.out.println("您的生日是:"+year+"年"+month+"月"+date+"日");
  32.                
  33.                 int  y,m,d,sum;
  34.                 y = Integer.parseInt(year);
  35.                 m = Integer.parseInt(month);
  36.                 d = Integer.parseInt(date);
  37.                 sum = y+m+d;
  38.                 System.out.println("您生日的年月日之和为:"+sum);
  39.         }
  40. }


复制代码
回复 使用道具 举报
王金科 发表于 2012-9-12 01:23

好的,问题解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马