java根据身份证号码得到生日和性别

Posted mry6

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java根据身份证号码得到生日和性别相关的知识,希望对你有一定的参考价值。

java根据身份证号码得到生日和性别

IDCards工具类

package com.liantuo.finance.utils;

//身份证工具类
public class IDCards {
	/** 
	 * 根据身份证号码得到生日,并返回性别 
	 * @param num 
	 * @return String[] string[0]生日 格式:19900510, string[1]性别
	 * 如果证件类型非法,则返回null 
	 */ 
	public static String[] getDataByNo(String num) {
	    // 判断是否为空  
	    if (num == null || num.trim().equals("")) {  
	        return null;  
	    }  
	    //得到证件号码长度  
	    int length = num.length();  
	    // 判断是否为15或18位  
	    if (length != 15 && length != 18) {  
	        return null;  
	    }  
	    //如果证件号码为15位,转换为18位  
	    if(length == 15){  
	        num=uptoeighteen(num);  
	    }

	    String[] data = new String[2];

		// 得到生日
		data[0] = num.substring(6, 14);
		// 校验性别
		data[1] = num.substring(14, 17);
		// 性别代码为偶数是女性奇数为男性
		if (Integer.parseInt(data[1]) % 2 == 0) {
			data[1] = "女";
		} else {
			data[1] = "男";
		}

	    return data;  
	}

	// 15位身份证号码提升为18位  
	private static String uptoeighteen(String fifteencardid) {
	    String eightcardid = fifteencardid.substring(0, 6);
	    eightcardid = eightcardid + "19";  
	    eightcardid = eightcardid + fifteencardid.substring(6, 15);  
	    eightcardid = eightcardid + getVerify(eightcardid);  
	    return eightcardid;  
	}

	// 得到第18位的校验码  
	private static String getVerify(String eightcardid) {
	    int remaining = 0;  
	    int[] wi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };  
	    int[] vi = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };  
	    int[] ai = new int[18];  
	    String returnStr = null;
	    try {  
	        if (eightcardid.length() == 18) {  
	            eightcardid = eightcardid.substring(0, 17);  
	        }  
	        if (eightcardid.length() == 17) {  
	            int sum = 0;  
	            String k = null;
	            for (int i = 0; i < 17; i++) {  
	                k = eightcardid.substring(i, i + 1);  
	                ai[i] = Integer.parseInt(k);
	                k = null;  
	            }  
	            for (int i = 0; i < 17; i++) {  
	                sum = sum + wi[i] * ai[i];  
	            }  
	            remaining = sum % 11;  
	        }  
	        returnStr = remaining == 2 ? "X" : String.valueOf(vi[remaining]);
	    } catch (Exception ex) {
	        return null;  
	    } finally {  
	        wi = null;  
	        vi = null;  
	        ai = null;  
	    }  
	    return returnStr;  
	}

	public static void main(String[] args) {
		String[] dataByNo = getDataByNo("xxxxxxxxxxxx");
		System.out.println(dataByNo[0]);
		System.out.println(dataByNo[1]);
	}

}

执行结果

在这里插入图片描述

以上是关于java根据身份证号码得到生日和性别的主要内容,如果未能解决你的问题,请参考以下文章

IOS 根据身份证号码获取 年龄 生日 性别

求解用java语言 编写一个身份证的类,可以用来验证身份证的长度,并可以显示地址码,生日,性别。

Excel自动从身份证中提取生日和性别

JS根据身份证号码精确计算年龄和性别

如何用身份证在Excel中自动提取姓名性别出生日期年龄

在EXCELL里输入身份证号后,怎样利用函数提取性别,生日呢?