通过身份证号码获取出生日期、性别、年龄
生活随笔
收集整理的這篇文章主要介紹了
通过身份证号码获取出生日期、性别、年龄
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*** 通過身份證號碼獲取出生日期、性別、年齡** @param certificateNo* @return 返回的出生日期格式:1990-01-01 性別格式:F-女,M-男*/public static Map<String, String> getBirAgeSex(String certificateNo) {String birthday = "";String age = "";Integer sex = 0;//判斷身份證號是否合法Boolean judgeId = judgeId(certificateNo);if (judgeId == false) {return new HashMap<String, String>();}int year = Calendar.getInstance().get(Calendar.YEAR);char[] number = certificateNo.toCharArray();boolean flag = true;//判斷字符是否為數字if (number.length == 15) {for (int x = 0; x < number.length; x++) {if (!flag) {return new HashMap<String, String>();}flag = Character.isDigit(number[x]);}} else if (number.length == 18) {for (int x = 0; x < number.length - 1; x++) {if (!flag) {return new HashMap<String, String>();}flag = Character.isDigit(number[x]);}}//分別獲取年月日 性別 年齡if (flag && certificateNo.length() == 15) {birthday = "19" + certificateNo.substring(6, 8) + "-"+ certificateNo.substring(8, 10) + "-"+ certificateNo.substring(10, 12);sex = Integer.parseInt(certificateNo.substring(certificateNo.length() - 3, certificateNo.length())) % 2 == 0 ? 2 : 1;age = (year - Integer.parseInt("19" + certificateNo.substring(6, 8))) + "";} else if (flag && certificateNo.length() == 18) {birthday = certificateNo.substring(6, 10) + "-"+ certificateNo.substring(10, 12) + "-"+ certificateNo.substring(12, 14);sex = Integer.parseInt(certificateNo.substring(certificateNo.length() - 4, certificateNo.length() - 1)) % 2 == 0 ? 2 : 1;age = (year - Integer.parseInt(certificateNo.substring(6, 10))) + "";}Map<String, String> map = new HashMap<String, String>();map.put("birthday", birthday);map.put("age", age);map.put("sex", sex.toString());return map;}/*** 根據身份證號判斷性別** @param idNumber* @return*/public static Integer judgeGender(String idNumber) throws IllegalArgumentException {System.out.println(idNumber.length());if (idNumber.length() != 18 && idNumber.length() != 15) {throw new IllegalArgumentException("身份證號長度錯誤");}int gender = 0;if (idNumber.length() == 18) {//如果身份證號18位,取身份證號倒數第二位char c = idNumber.charAt(idNumber.length() - 2);gender = Integer.parseInt(String.valueOf(c));} else {//如果身份證號15位,取身份證號最后一位char c = idNumber.charAt(idNumber.length() - 1);gender = Integer.parseInt(String.valueOf(c));}System.out.println("gender = " + gender);if (gender % 2 == 1) {return 1;} else {return 2;}}/*** 根據身份證號計算年齡** @param idCard* @return*/public static Integer countAge(String idCard) {//判斷身份證號是否合法Boolean judgeId = judgeId(idCard);if (judgeId == false) {return 0;}//截取身份證中出行人出生日期中的年、月、日Integer personYear = Integer.parseInt(idCard.substring(6, 10));Integer personMonth = Integer.parseInt(idCard.substring(10, 12));Integer personDay = Integer.parseInt(idCard.substring(12, 14));Calendar cal = Calendar.getInstance();// 得到當前時間的年、月、日Integer yearNow = cal.get(Calendar.YEAR);Integer monthNow = cal.get(Calendar.MONTH) + 1;Integer dayNow = cal.get(Calendar.DATE);// 用當前年月日減去生日年月日Integer yearMinus = yearNow - personYear;Integer monthMinus = monthNow - personMonth;Integer dayMinus = dayNow - personDay;Integer age = yearMinus + 1; //先大致賦值if (yearMinus == 0) { //出生年份為當前年份age = 0;} else { //出生年份大于當前年份if (monthMinus < 0) {//出生月份小于當前月份時,還沒滿周歲age = age - 1;}if (monthMinus == 0) {//當前月份為出生月份時,判斷日期if (dayMinus < 0) {//出生日期小于當前月份時,沒滿周歲age = age - 1;}}}System.out.println(age);return age;}// 判斷身份證號是否合法public static Boolean judgeId(String id) {Boolean result = true;// 長度不等于 18 位if (id.length() != 18) {return false;}// 系數算法String tempId = getStr(id, 0, 16);int[] coeff = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};char[] end = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};int sum = 0;for (int i = 0; i < tempId.length(); i++) {int bye = tempId.charAt(i) - '0';sum += bye * coeff[i];}sum %= 11;if (end[sum] != getStr(id, 17, 17).charAt(0)) {result = false;}return result;}// 截取字符串的方法public static String getStr(String str, int a, int b) {b++;return str.substring(a, b);}
總結
以上是生活随笔為你收集整理的通过身份证号码获取出生日期、性别、年龄的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 雅克比矩阵(上)-----雅克比推导
- 下一篇: 双目结构光3D原理