日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 从身份证号码中获取出生日期、性别、年龄(15位和18位)

發布時間:2023/12/29 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 从身份证号码中获取出生日期、性别、年龄(15位和18位) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目場景:

提示:這次做項目的時候遇到一個工具,整理出來以后可以直接使用
問題描述:給一個String 類型的 身份證號碼,需要從這串數字中獲取出生日期、性別、年齡
身份證號碼分為 15 位 和18 位。
從1985年,開始頒發第一代居民身份證,而第一代身份證就是15位。分別是6位行政區劃代碼+6位出生日期+3位順序碼
近年來,我國開始頒發第二代居民身份證,身份證號碼由第一代的15升級到18位,這18位數字分別是6位行政區劃代碼+8位出生日期+3位順序碼+1位校驗碼


問題分析

  • 15位身份證號碼:第7、8位為出生年份(兩位數),第9、10位為出生月份,第11、12位代表出生日期,第15位代表性別,奇數為男,偶數為女。
  • 18位身份證號碼:第7、8、9、10位為出生年份(四位數),第11、第12位為出生月份,第13、14位代表出生日期,第17位代表性別,奇數為男,偶數為女。

代碼部分

前提是:身份證號碼要正確(即校驗碼正確),所以調用 方法前要保證身份證號碼正確

public class IdCardNumberMethod {/*** 獲取出生日期** @return 返回字符串類型*/public String getBirthFromIdCard(String idCard) {if (idCard.length() != 18 && idCard.length() != 15) {return "請輸入正確的身份證號碼";}if (idCard.length() == 18) {String year = idCard.substring(6).substring(0, 4);// 得到年份String month = idCard.substring(10).substring(0, 2);// 得到月份String day = idCard.substring(12).substring(0, 2);// 得到日return (year + "-" + month + "-" + day);} else if (idCard.length() == 15) {String year = "19" + idCard.substring(6, 8);// 年份String month = idCard.substring(8, 10);// 月份String day = idCard.substring(10, 12);// 得到日return (year + "-" + month + "-" + day);}return null;}/*** 獲取出生日期** @return 返回日期格式*/public Date getBirthDayFromIdCard(String idCard) throws ParseException {Date birth = null;if (idCard.length() == 18) {String year = idCard.substring(6).substring(0, 4);// 得到年份String month = idCard.substring(10).substring(0, 2);// 得到月份String day = idCard.substring(12).substring(0, 2);// 得到日SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");birth = format.parse(year + "-" + month + "-" + day);} else if (idCard.length() == 15) {String year = "19" + idCard.substring(6, 8);// 年份String month = idCard.substring(8, 10);// 月份String day = idCard.substring(10, 12);// 得到日SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");birth = format.parse(year + "-" + month + "-" + day);}return birth;}/*** 獲取性別* 0=未知的性別,9=未說明的性別,2=女性,1=男性* @return int*/public int getSexFromIdCard(String idCard) {int sex = 9;// 身份證號碼為空if (idCard == "" || idCard.length() <= 0){return sex = 0;}if (idCard.length() == 18) {if (Integer.parseInt(idCard.substring(16).substring(0, 1)) % 2 == 0) {// 判斷性別sex = 2; // 女} else {sex = 1; // 男}} else if (idCard.length() == 15) {String usex = idCard.substring(14, 15);// 用戶的性別if (Integer.parseInt(usex) % 2 == 0) {sex = 2; // 女} else {sex = 1; // 男}}return sex;}/*** 根據身份證的號碼算出當前身份證持有者的年齡** @param* @throws Exception* @return -1(表示異常) 0 (身份證號碼為空)*/public int getAgeForIdcard(String idcard) {try {int age = 0;if (StringUtils.isEmpty(idcard)) {return age;}String birth = "";if (idcard.length() == 18) {birth = idcard.substring(6, 14);} else if (idcard.length() == 15) {birth = "19" + idcard.substring(6, 12);}int year = Integer.valueOf(birth.substring(0, 4));int month = Integer.valueOf(birth.substring(4, 6));int day = Integer.valueOf(birth.substring(6));Calendar cal = Calendar.getInstance();age = cal.get(Calendar.YEAR) - year;//周歲計算if (cal.get(Calendar.MONTH) < (month - 1) || (cal.get(Calendar.MONTH) == (month - 1) && cal.get(Calendar.DATE) < day)) {age--;}return age;} catch (Exception e) {e.getMessage();}return -1;}/*** 15 位身份證號碼轉 18 位* <p>* 15位身份證號碼:第7、8位為出生年份(兩位數),第9、10位為出生月份,第11、12位代表出生日期,第15位代表性別,奇數為男,偶數為女。* 18位身份證號碼:第7、8、9、10位為出生年份(四位數),第11、第12位為出生月份,第13、14位代表出生日期,第17位代表性別,奇數為男,偶數為女。*/public StringBuffer IdCardMethod15To18(String idCard) {//將字符串轉化為buffer進行操作StringBuffer stringBuffer = new StringBuffer(idCard);//身份證最后一位校驗碼,X代表10(順序固定)char[] checkIndex = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};int sum = 0;//在第6位插入年份的前兩位19stringBuffer.insert(6, "19");for (int i = 0; i < stringBuffer.length(); i++) {char c = stringBuffer.charAt(i);//前17位數字int ai = Integer.valueOf(String.valueOf(c));//前17位每位對應的系數(7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 )int wi = ((int) Math.pow(2, stringBuffer.length() - i)) % 11;//總和(每位數字乘以系數再相加)sum = sum + ai * wi;}//總和除以11求余int indexOf = sum % 11;//根據余數作為下表在校驗碼數組里取值stringBuffer.append(checkIndex[indexOf]);return stringBuffer;}}
**2022年12月16日 ~~**

時隔多日,補充一下身份證號的校驗,15位和18位都可以進行

/*** 身份證號碼驗證** @param idCard* @return*/public static boolean validateIdCard(String idCard) throws Exception {if (idCard == null || "".equals(idCard)) {throw new Exception("身份證號碼為空");}if (idCard.length() != 18 && idCard.length() != 15) {throw new Exception("身份證號碼長度不正確");}// 定義判別用戶身份證號的正則表達式(15位或者18位,最后一位可以為字母)String regularExpression ="(^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|"+ "(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}$)";boolean matches = idCard.matches(regularExpression);// 判斷第18位校驗值if (matches) {if (idCard.length() == 18) {try {char[] charArray = idCard.toCharArray();// 前十七位加權因子int[] idCardWi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};// 這是除以11后,可能產生的11位余數對應的驗證碼String[] idCardY = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};int sum = 0;for (int i = 0; i < idCardWi.length; i++) {int current = Integer.parseInt(String.valueOf(charArray[i]));int count = current * idCardWi[i];sum += count;}char idCardLast = charArray[17];int idCardMod = sum % 11;if (idCardY[idCardMod].toUpperCase().equals(String.valueOf(idCardLast).toUpperCase())) {return true;} else {return false;}} catch (Exception e) {e.printStackTrace();return false;}}if (idCard.length() == 15) {validateIdCard(String.valueOf(idCardMethod15To18(idCard)));}}return matches;}

總結

以上是生活随笔為你收集整理的Java 从身份证号码中获取出生日期、性别、年龄(15位和18位)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 性爱动漫 | 国产91综合一区在线观看 | 91精品综合久久久久久五月天 | 色婷婷丁香 | 三上悠亚一区二区 | 亚洲天堂免费av | 九色综合网 | 又粗又猛又爽又黄少妇视频网站 | 国产清纯白嫩初高中在线观看性色 | 97在线观看 | 国产一区二区不卡视频 | 欧美性大战久久久久久久 | jizz性欧美15 | 国产chinesehd精品 | www黄在线观看 | 亚洲超碰在线观看 | 电影中文字幕 | 欧美激情一区二区视频 | 制服丝袜一区 | 性chinese天美传媒麻 | 亚洲精品鲁一鲁一区二区三区 | 亚洲精品大片 | 日韩高清久久 | 日韩亚洲一区二区三区 | 久久久久久久网站 | 无遮挡在线 | 中文字幕一区二区三区人妻不卡 | 欧美三级视频在线观看 | 性欧美videossex精品 | 少妇激情偷人三级 | 青青青在线观看视频 | 日韩一区二区a片免费观看 伊人网综合在线 | 国产电影一区二区三区爱妃记 | 久久精品无码专区免费 | 欧美爱爱一区二区 | 粉嫩一区| 综合网五月| 91大神精品在线 | 爱逼av| 中文字幕亚洲在线观看 | 欧美激情午夜 | 善良的女朋友在线观看 | 91福利网 | 高清国产mv在线观看 | 亚洲不卡在线 | 清冷学长被爆c躁到高潮失禁 | 熊出没之冬日乐翻天免费高清观看 | av午夜激情 | 天堂v在线观看 | 久久中文字幕无码 | 日韩毛片在线免费观看 | www.夜色| 欧美人狂配大交3d | 欧美91精品久久久久国产性生爱 | 亚洲六月丁香色婷婷综合久久 | 人人射人人 | www.啪| 亚洲涩综合| 18岁免费观看电视连续剧 | 久久免费国产 | 欧美自拍第一页 | 麻豆视频91 | 免费福利影院 | 东方av正在进入 | 久久久久久久久成人 | 色吊妞 | 国产1区2区3区4区 | 国产精品自拍一区 | 久久艹精品视频 | 8090av| 沟厕沟厕近拍高清视频 | 天天爱天天做 | 九九精品九九 | 中文字幕一区二区人妻视频 | 中文字幕人妻一区二区在线视频 | 国产www在线 | 亚洲三级在线看 | jzzijzzij亚洲成熟少妇在线播放 狠狠躁日日躁夜夜躁2022麻豆 | 久久久999视频 | 手机在线播放av | 国产精品666 | av2014天堂| 国产毛片欧美毛片久久久 | 精品久久久久久中文字幕人妻最新 | 国产在线精品视频 | 少妇高潮淫片免费观看 | 国产一级片在线 | 伊人天堂网| 久久99久久久久 | 亚洲天堂网在线观看 | 四虎永久免费地址 | 奇米影视欧美 | 麻豆网站视频 | 91在线精品入口 | 老司机性视频 | 熟女人妻视频 | 偷拍一区二区三区四区 | 久久久久久九九九 | 91动态图 |