1. 程式人生 > >身份證獲取生日,性別,年齡演算法

身份證獲取生日,性別,年齡演算法


import java.util.Calendar;
import java.util.regex.Pattern;
import com.zhongan.contacts.user.dto.ResultDTO;


/**
 * 身份證演算法[計算性別,生日,年齡]
 * @author daichangbo
  */
public class CertificateNoUtils { 


public static ResultDTO parseCertificateNo(String certificateNo) {  


ResultDTO resultDTO = new ResultDTO();  
String myRegExpIDCardNo = "^\\d{6}(((19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])\\d{3}([0-9]|x|X))|(\\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])\\d{3}))$";  
boolean valid=Pattern.matches(myRegExpIDCardNo,certificateNo)||(certificateNo.length() == 17 && Pattern.matches(myRegExpIDCardNo,certificateNo.substring(0,15)));  
if(!valid){  
resultDTO.setStatueMessage("證件號碼不規範!");  
return resultDTO;  
}  
int idxSexStart = 16;  
int birthYearSpan = 4;  
//如果是15位的證件號碼  
if(certificateNo.length() == 15) {  
idxSexStart = 14;  
birthYearSpan = 2;  
}  


//性別  
String idxSexStr = certificateNo.substring(idxSexStart, idxSexStart + 1);  
int idxSex = Integer.parseInt(idxSexStr) % 2;  
String sex = (idxSex == 1) ? "M" : "F";  
resultDTO.setSex(sex);  

//出生日期  
String year = (birthYearSpan == 2 ? "19" : "") + certificateNo.substring(6, 6 + birthYearSpan);  
String month = certificateNo.substring(6 + birthYearSpan, 6 + birthYearSpan + 2);  
String day = certificateNo.substring(8 + birthYearSpan, 8 + birthYearSpan + 2);  
String birthday = year + '-' + month + '-' + day;  
resultDTO.setBirthday(birthday);  

//年齡  
Calendar certificateCal = Calendar.getInstance();  
Calendar currentTimeCal = Calendar.getInstance();  
certificateCal.set(Integer.parseInt(year), Integer.parseInt(month)-1, Integer.parseInt(day));  
int yearAge = (currentTimeCal.get(currentTimeCal.YEAR)) - (certificateCal.get(certificateCal.YEAR));  
certificateCal.set(currentTimeCal.get(Calendar.YEAR), Integer.parseInt(month)-1, Integer.parseInt(day));  
int monthFloor = (currentTimeCal.before(certificateCal) ? 1 : 0);  
resultDTO.setAge(yearAge - monthFloor);  
return resultDTO;  
}  
}  

相關推薦

沫沫金原創提供:完整的根據身份證獲取省份、性別年齡生日及頁面驗證

數字 部分 ast script cit key oot test log 概述: 身份證的校驗,識別,分離,處處可見。最近H5移動端的項目就需要掃碼獲取身份證,根據身份證自動識別省份、性別、年齡、生日信息。這裏分享完善版,希望大家喜歡。 環境: 依賴jQuery、Boot

通過身份證號動態獲取生日性別年齡

$('#idNumber').blur(function (){ var UUserCard = $("#idNumber").val(); if(UUserCard!=null&&

身份證獲取生日性別年齡演算法

import java.util.Calendar;import java.util.regex.Pattern;import com.zhongan.contacts.user.dto.ResultDTO;/** * 身份證演算法[計算性別,生日,年齡] * @author

Java-根據身份證獲取年齡性別出生日期

不廢話,直接開始擼... 老鐵們給個贊,雙擊6666.... IdcardValidator類:用來校驗身份證的資訊 package com.aidongsports.backstagemanagement.utils; import java.text.Pa

隨機生成個人資訊(姓名性別電話住址身份證號碼)

個人資訊類 package com.epoint.junit.test; public class UTPersonInfo { private String name; private String sex; private

資料庫練習題:學生表(學號,姓名性別系部年齡)選課表(學號課程號成績)課程表(課程號,課程名,學分)

資料庫中有如下三個表: 學生表(學號,姓名,性別,系部,年齡)選課表(學號,課程號,成績)課程表(課程號,課程名,學分) (1)、寫出建立以上三個表的sq語句 (2)、從選課表中查詢所有選課資訊,即學號、課程號、成績,並給成績加8分 (3)、從選課表中查詢選修課程號C02且該]課程考試及格的學生的學號

mysql根據身份證提取生日性別

update security_user set sex='女' where id in (  select a.id from (  SELECT id , SUBSTR(ID_CARD,7,8),SUBSTR(ID_CARD,17,1),ID_CARD,birthday,

python 從身份證獲取生日年齡性別資訊

class GetInformation(object): def __init__(self,id): self.id = id self.birth_

通過身份證號碼提取年齡性別

class GetInformation(object): def __init__(self,id): self.id = id self.birth_year = int(self.id[6:10]) self.birth_

java8 通過18位身份證號提取使用者資訊(年齡生日姓別)

工作中經常用到的通過身份證號(18位)提取使用者資訊(年齡,生日,姓別),分享給大家: 先做一個javabean 存使用者資訊: package com; import lombok.*; import java.time.LocalDate; /** * @author kev

C++第十週【任務2】定義一個名為CPerson的類有以下私有成員:姓名、身份證號、性別年齡成員函式:建構函式、解構函式、輸出資訊的函式。

/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱: C++第十週【任務2】 * 作

【Java工具十二】java 身份證驗證包含香港和臺灣根據身份證獲取性別、戶籍等

package com.xxx.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.D

mysql根據身份證查詢年齡地址性別

select  case left(id_number,2) when '11' then '北京市'when '12' then '天津市'when '13' then '河北省'when '14' then '山西省'when '15' then '內蒙古自治區'when

sql抽取身份證資訊生日年齡星座屬性

提取內容:birthday,age,sex,property(屬性),constellation(星座),province,age_group,six_idcard,census_register insert into test008 select cv

新生入學需要儲存學生資料現在定義整型變數存放年齡學號定義字元變數存放性別定義浮點型變數存放學分數

順序結構及其流程     void main()                 /*main 函式,程式的入口*/  {       

java ——定義一個抽象的"Role"類有姓名年齡性別等成員變數.

定義一個抽象的"Role"類,有姓名,年齡,性別等成員變數 1)要求儘可能隱藏所有變數(能夠私有就私有,能夠保護就不要公有), 再通過GetXXX()和SetXXX()方法對各變數進行讀寫。具有一個抽象的play()方法, 該方法不返回任何值,同時至少定義兩個構造方法。Role類中要

根據身份證獲取性別生日等資訊

(1)根據身份證獲取性別 方法1: private string sex(string identityCard) { string sex = ""; //處理18位的身份證號碼從號碼中得到生日和性別程式碼 if (identityCard.Length ==

java ——定義一個抽象的"Role"類有姓名年齡性別等成員變數.

定義一個抽象的"Role"類,有姓名,年齡,性別等成員變數 1)要求儘可能隱藏所有變數(能夠私有就私有,能夠保護就不要公有), 再通過GetXXX()和SetXXX()方法對各變數進行讀寫。具有一個抽象的play()方法, 該方法不返回任何值,同時至少定義兩個