用Java语言编写一个应用程序,实现身份证号码从15到18为的转换,并显示该居民的出生日期及性别
要求
1. 根据输入的身份证号位数判断身份证的新旧
2. 若是新身份证,在控制台输出:“该居民身份证是新的身份证”。
3. 若是旧身份证,则进行如下操作:
 在控制台输出:“该居民身份证是旧的身份证”;
 计算并输出18位新身份证号码;
 根据身份证号的7-14位(YYYYMMDD)显示该居民身份证的出生日期;
 根据身份证号的第17位(奇数为男性、偶数为女性)显示性别。
限制条件:只考虑20世纪(即1990-1999)出生的人,不需考虑出生日期是否有效
4. 该java类名为IDCardConvert,要求打包在wish中参考输出结果
输入18位身份证号
java IDCardConvert 310103197508301594
输出结果为:
该居民身份证是新的身份证输入15位身份证号
java IDCardConvert 310103750830159
输出结果为:
该居民身份证是旧的身份证
该居民的新身份证为:310103197508301592
该居民出生时间为:1975年8月30日
该居民为:男性

解决方案 »

  1.   

    没有完整输出,楼主要自己加点结果输出就可以了
    public class IDCardConvert { private String id;
    private StringBuffer new_id;

    public static String old = "该居民身份证是旧的身份证";
    public static String fresh = "该居民身份证是新的身份证";

    public IDCardConvert(String old)
    {
    this.id = old;
    this.new_id = new StringBuffer();
    }

    public boolean IsNew()
    {
    return this.id.length() >= 18 ? true : false;
    }

    public String convert()
    {
    this.getPrefix();
    this.addBirthday();
    this.addPostfix();
    return this.new_id.toString();
    }

    private void getPrefix()
    {
    this.new_id.append(this.id.subSequence(0, 6));
    }

    private void addBirthday()
    {
    this.new_id.append("19" + this.id.substring(6, 12));
    }

    private void addPostfix()
    {
    this.new_id.append(this.id.substring(12) + "2");
    }

    public String getGender()
    {
    int gender = this.new_id.charAt(16);

    return (gender%2==0) ? "女性" : "男性";
    }

    public static void main(String[] args) {
    if(args.length < 1)
    return;
    IDCardConvert card = new IDCardConvert(args[0]);

    if(card.IsNew())
    {
    System.out.println(IDCardConvert.fresh);
    }
    else
    {
    System.out.println(IDCardConvert.old);

    System.out.println(card.convert());

    System.out.println(card.getGender());
    }
    }}
      

  2.   


    //15位转换为18位身份证时遵循规则如下:
    //1、在号码的第6位后插入19生成个17位的号码,该号码为主号码。
    //2、最后一位为效验位,即主号码对除11的余数<%运算>(效验方法为自定义)。
    //3、主号码的后三位即15、16、17位偶数为女性奇数为男性
    //4、最终新身份证的号码为“主号码+效验位”。class IdRecognitionSystem
    {

    String idNumber;//身份证号码
    String year;//年
    String month;//月
    String day;//日
    String gender;//性别
    int numberLength;//身份证号码长度
    boolean idMode;//身份证版本
    IdRecognitionSystem(String myIdNumber)
    {
    this.idNumber=myIdNumber;
    }
    void isNew()//判别身份证是新或旧
    {
    numberLength=idNumber.length();//获取号码长度
    switch(numberLength)//判断身份证版本
    {
    case 15:
    idMode=false;
    break;
    case 18:
    idMode=true;
    break;
    default://如果输入的号码不是15位或18位则打印下面语句并终止程序
    System.out.println("错误!请重新输入有效身份证号码");
    System.exit(1);
    }
    }
    void oldChangeToNew()//转换老身份证号为新身份证号
    {
    StringBuffer idNumber=new StringBuffer(this.idNumber);
    //将身份证号传递给一个StringBuffer为方便修改
    StringBuffer mainCode;//主号码
    byte lastCode;//效验位
    mainCode=idNumber.insert(6,"19");//在原号码第6位后插入19。
    lastCode=(byte)((Long.decode(mainCode.toString())%11));
    //运算后结果为long型,为了节省空间强制转换为byte型。
    if(lastCode==10)//如果效验位数字等于10,则为X
    {
    idNumber=idNumber.insert(17, "x");
    }
    else idNumber=idNumber.insert(17,lastCode);
    this.idNumber=idNumber.toString();
    //将修改后产生的新号码传递给该对象的idNumber
    //如果修改后不传递,那么对象的idNumber还是没改变,导致获取信息错误。
    }

    void getInformation()//从号码中获取该居民的信息
    {
    year=idNumber.substring(6,10);//获取出生日期
    month=idNumber.substring(10,12);
    day=idNumber.substring(12,14);
    if((Integer.valueOf(idNumber.substring(14,17)))%2==0)//获取该居民的性别
    {
    gender="女性";
    }
    else
    {
    gender="男性";
    }
    }

    public static void main(String[] args)
    {
    IdRecognitionSystem irs=new IdRecognitionSystem("510104198");//给对象传递身份证号

    System.out.println("该居民身份证号是:"+irs.idNumber);
    irs.isNew();//对该号进行判断
    if(irs.idMode==false)
    {
    System.out.println("该居民身份证是旧的身份证");
    irs.oldChangeToNew();//对老身份证号码进行转换

    }
    else
    {
    System.out.println("该居民身份证是新的身份证");
    }
    irs.getInformation();//获取居民信息
    System.out.println("该居民出生时间为 "+irs.year+"年 "+irs.month+"月 "+irs.day+"日");
    System.out.println("该居民性别为:"+irs.gender);
    }

    }
    ------------------------------------------------------------------------------------
    以上代码不包含打包,我也是个新手,不知道我这段代码有什么不足,请大家多多指教
      

  3.   

    //15位转换为18位身份证时遵循规则如下:
    //1、在号码的第6位后插入19生成个17位的号码,该号码为主号码。
    //2、最后一位为效验位,即主号码对除11的余数<%运算>(效验方法为自定义)。
    //3、主号码的后三位即15、16、17位偶数为女性奇数为男性
    //4、最终新身份证的号码为“主号码+效验位”。运算规则是这样的吗????我怎么看到别人身份证后面还有X呢?