package com.yifu.cloud.plus.v1.yifu.common.core.util;

import lombok.extern.slf4j.Slf4j;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static java.util.regex.Pattern.compile;

/**
 * 身份证处理
 * @Author fxj
 * @Date 2019-11-15
 * @return
 **/
@Slf4j
public class IdCardUtil {
    public static int IdNOToAge(String IdNO){
        int leh = IdNO.length();
        Date dates;
        SimpleDateFormat df = new SimpleDateFormat("yyyy");
        String year=df.format(new Date());
        dates = getBirthdate(IdNO);
        int u=Integer.parseInt(year)-Integer.parseInt(df.format(dates));
        return u;


    }

    /**
     * 提取身份证中的出生日期，身份证非法则返回空
     * @param idNum
     * @return
     */
    public static Date getBirthdate(String idNum){
        Pattern idNumPattern = null;
        Matcher idNumMatcher = null;
        Date date = null;
        //定义判别用户身份证号的正则表达式（要么是15位，要么是18位，最后一位可以为字母）
        idNumPattern = compile("(\\d{14}[0-9a-zA-Z])|(\\d{17}[0-9a-zA-Z])");
        //通过Pattern获得Matcher
        idNumMatcher = idNumPattern.matcher(idNum);
        //判断用户输入是否为身份证号
        if(idNumMatcher.matches()){
            Pattern birthDatePattern =null;
            Matcher birthDateMather = null;
            String year = null;
            if(idNum.length()==18){
                //如果是，定义正则表达式提取出身份证中的出生日期
                birthDatePattern= compile("\\d{6}(\\d{4})(\\d{2})(\\d{2}).*");//身份证上的前6位以及出生年月日
                //通过Pattern获得Matcher
                birthDateMather= birthDatePattern.matcher(idNum);
            }else if(idNum.length()==15){
                //如果是，定义正则表达式提取出身份证中的出生日期
                birthDatePattern= compile("\\d{6}(\\d{2})(\\d{2})(\\d{2}).*");//身份证上的前6位以及出生年月日
                //通过Pattern获得Matcher
                birthDateMather= birthDatePattern.matcher(idNum);
            }
            //通过Matcher获得用户的出生年月日
            if(birthDateMather.find()){
                if(idNum.length()==18){
                    year = birthDateMather.group(1);
                }else if(idNum.length()==15){
                    year = "19"+birthDateMather.group(1);
                }
                String month = birthDateMather.group(2);
                String datetemp = birthDateMather.group(3);
                String dateStr =year+"-"+month+"-"+datetemp;
                SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" );
                Date shijian = null;
                try {
                    shijian =sdf.parse(dateStr);
                    String temp = sdf.format(shijian);
                    if(dateStr.equals(temp)){
                        //输出用户的出生年月日
                        date = shijian;
                    }
                } catch (ParseException e) {
                    //数据有误
                }

            }
        }
        return date;
    }
    /**
     * 获取身份证的性别
     * @Author fxj
     * @Date 2019-12-25
     * @param idNum
     * @return
     **/
    public static String getSex(String idNum){
        Pattern idNumPattern = null;
        Matcher idNumMatcher = null;
        Date date = null;
        //定义判别用户身份证号的正则表达式（要么是15位，要么是18位，最后一位可以为字母）
        idNumPattern = compile("(\\d{14}[0-9a-zA-Z])|(\\d{17}[0-9a-zA-Z])");
        //通过Pattern获得Matcher
        idNumMatcher = idNumPattern.matcher(idNum);
        //判断用户输入是否为身份证号
        String sex = null;
        if(idNumMatcher.matches()) {
            if (idNum.length() == 18) {
                if (Integer.parseInt(idNum.substring(16).substring(0, 1)) % 2 == 0) {// 判断性别
                    sex = "2";
                } else {
                    sex = "1";
                }
            } else if (idNum.length() == 15) {
                if (Integer.parseInt(idNum.substring(14, 15)) % 2 == 0) {
                    sex = "2";
                } else {
                    sex = "1";
                }
            }
        }
        return sex;
    }
}
