计算18位身份证生日和性别,如果为15位转换成18位的身份证号

计算18位身份证生日和性别,如果为15位转换成18位的身份证号

package job;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class li4_5 {
    public static void main(String[] args) {
        //使用读入流操作 读取字符串
        BufferedReader in=new BufferedReader(new InputStreamReader(System.in)) ;

        String n=new String();
        try {
            n=in.readLine();//读取一行字符串
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
     //将字符串载入SringBuffer 操作
        StringBuffer s=new StringBuffer(n);
        if(s.length()==18){
            System.out.println("这是新的身份证编码");
            System.out.println("你的出生日期为:"+s.substring(6, 14));//截取生日
            String LL=s.substring(17);
            int g=Integer.parseInt(LL);

// 判断是男是女  即将倒数第二位数 判断是 奇数还是偶数  偶数:男  奇数:女
            if(g%2==0){
                System.out.println("男");
            }else{
                System.out.println("女");
            }
        }else if(s.length()==15){  //否则重新计算15位转换成18位
            String c=s.substring(6, 8);
            int b= Integer.parseInt(c);
            System.out.println(b);
            if(b>48&&b<20){
                s.insert(6, "19");
            }else{
                s.insert(6, "20");
            }
            int k=0;

           //计算加权因子
            for(int j=0;j<s.length();j++){
                int pp=Integer.parseInt(String.valueOf(s.charAt(j)));
                 k+=pp*Math.pow(2, j);
            }
            int p=k%11;
       //将 后缀位数因子 追加连接到字符串
            String q=String.valueOf(p);
            s.append(q);
            System.out.println(s);
        }else{
            System.out.println("请输入正确的身份证号");
        }
    }

}