| 
						
						
							
								
							
						
						
					 | 
					@ -4,15 +4,17 @@ import org.apache.commons.lang3.StringUtils; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import org.slf4j.Logger; | 
					 | 
					 | 
					import org.slf4j.Logger; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import org.slf4j.LoggerFactory; | 
					 | 
					 | 
					import org.slf4j.LoggerFactory; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					import java.text.ParseException; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import java.text.SimpleDateFormat; | 
					 | 
					 | 
					import java.text.SimpleDateFormat; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import java.time.LocalDate; | 
					 | 
					 | 
					import java.time.LocalDate; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import java.util.Calendar; | 
					 | 
					 | 
					import java.util.Calendar; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					import java.util.Date; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import java.util.GregorianCalendar; | 
					 | 
					 | 
					import java.util.GregorianCalendar; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import java.util.Hashtable; | 
					 | 
					 | 
					import java.util.Hashtable; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import java.util.regex.Matcher; | 
					 | 
					 | 
					import java.util.regex.Matcher; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import java.util.regex.Pattern; | 
					 | 
					 | 
					import java.util.regex.Pattern; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					import static java.util.regex.Pattern.*; | 
					 | 
					 | 
					import static java.util.regex.Pattern.compile; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					/** | 
					 | 
					 | 
					/** | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 * 身份证号校验 | 
					 | 
					 | 
					 * 身份证号校验 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -24,6 +26,15 @@ public class IdCardNoValidatorUtils { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    private static Logger logger = LoggerFactory.getLogger(IdCardNoValidatorUtils.class); | 
					 | 
					 | 
					    private static Logger logger = LoggerFactory.getLogger(IdCardNoValidatorUtils.class); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    /** | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * 15位身份证号 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     */ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    private static final Integer FIFTEEN_ID_CARD = 15; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    /** | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * 18位身份证号 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     */ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    private static final Integer EIGHTEEN_ID_CARD = 18; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    /** | 
					 | 
					 | 
					    /** | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					     * 身份证验证 | 
					 | 
					 | 
					     * 身份证验证 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					     * | 
					 | 
					 | 
					     * | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -216,15 +227,15 @@ public class IdCardNoValidatorUtils { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        int nowMonth = now.getMonthValue(); | 
					 | 
					 | 
					        int nowMonth = now.getMonthValue(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        int cardYear = 0; | 
					 | 
					 | 
					        int cardYear = 0; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        int cardMonth = 0; | 
					 | 
					 | 
					        int cardMonth = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        if (StringUtils.isNotBlank(IDCard) && checkIsIdCardNo(IDCard)) { | 
					 | 
					 | 
					        if (StringUtils.isNotBlank(IDCard) && isValid(IDCard)) { | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					            if (IDCard.length() == 15) { | 
					 | 
					 | 
					            if (IDCard.length() == FIFTEEN_ID_CARD) { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					                // 身份证上的年份(15位身份证为1980年前的)
 | 
					 | 
					 | 
					                // 身份证上的年份(15位身份证为1980年前的)
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                String uyear = "19" + IDCard.substring(6, 8); | 
					 | 
					 | 
					                String uyear = "19" + IDCard.substring(6, 8); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                cardYear = Integer.parseInt(uyear); | 
					 | 
					 | 
					                cardYear = Integer.parseInt(uyear); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                // 身份证上的月份
 | 
					 | 
					 | 
					                // 身份证上的月份
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                String uyue = IDCard.substring(8, 10); | 
					 | 
					 | 
					                String uyue = IDCard.substring(8, 10); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                cardMonth = Integer.parseInt(uyue); | 
					 | 
					 | 
					                cardMonth = Integer.parseInt(uyue); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					            } else if (IDCard.length() == 18) { | 
					 | 
					 | 
					            } else if (IDCard.length() == EIGHTEEN_ID_CARD) { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					                // 身份证上的年份
 | 
					 | 
					 | 
					                // 身份证上的年份
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                String year = IDCard.substring(6).substring(0, 4); | 
					 | 
					 | 
					                String year = IDCard.substring(6).substring(0, 4); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                cardYear = Integer.parseInt(year); | 
					 | 
					 | 
					                cardYear = Integer.parseInt(year); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -243,5 +254,47 @@ public class IdCardNoValidatorUtils { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        return age; | 
					 | 
					 | 
					        return age; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    } | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    /** | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * 身份证验证是否有效 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * @param id 号码内容 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * @return boolean | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * @author | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * @date | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     */ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    public static boolean isValid(String id) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        Boolean validResult = true; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        //校验长度只能为15或18
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        int len = id.length(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        if (len != FIFTEEN_ID_CARD && len != EIGHTEEN_ID_CARD) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            validResult = false; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        //校验生日
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        if (!validDate(id)) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            validResult = false; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        return validResult; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    /** | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * 校验生日 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * @param id | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * @return | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     */ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    private static boolean validDate(String id) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        try { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            String birth = id.length() == FIFTEEN_ID_CARD ? "19" + id.substring(6, 12) : id.substring(6, 14); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            Date birthDate = sdf.parse(birth); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            if (!birth.equals(sdf.format(birthDate))) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                return false; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        } catch (ParseException e) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            return false; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        return true; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					} | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					
  |