| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -35,14 +35,14 @@ public class IdCardNoValidatorUtils { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            //判断号码的长度 15位或18位
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (idCardNo.length() != 15 && idCardNo.length() != 18) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证号码长度应该为15位或18位")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.warn(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证号码长度应该为15位或18位")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (idCardNo.length() == 18) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                String lastStr = idCardNo.substring(idCardNo.length() - 1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (!Character.isDigit(lastStr.charAt(0))) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (Character.isLowerCase(lastStr.charAt(0))) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "18身份证号最后一位字母需要大写")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        logger.warn(String.format("校验身份证号:%s错误:%s", idCardNo, "18身份证号最后一位字母需要大写")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        return false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } else { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -55,7 +55,7 @@ public class IdCardNoValidatorUtils { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                iDCardNo = idCardNo.substring(0, 6) + "19" + idCardNo.substring(6, 15); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (isStrNum(iDCardNo) == false) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证15位号码都应为数字;18位号码除最后一位外,都应为数字")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.warn(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证15位号码都应为数字;18位号码除最后一位外,都应为数字")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            //判断出生年月
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -63,27 +63,27 @@ public class IdCardNoValidatorUtils { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String strMonth = iDCardNo.substring(10, 12);// 月份
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            String strDay = iDCardNo.substring(12, 14);// 月份
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (isStrDate(strYear + "-" + strMonth + "-" + strDay) == false) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证生日无效")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.warn(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证生日无效")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            GregorianCalendar gc = new GregorianCalendar(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > 150 || (gc.getTime().getTime() - s.parse(strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证生日不在有效范围")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.warn(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证生日不在有效范围")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证月份无效")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.warn(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证月份无效")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证日期无效")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.warn(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证日期无效")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            //判断地区码
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            Hashtable h = GetAreaCode(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (h.get(iDCardNo.substring(0, 2)) == null) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证地区编码错误")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.warn(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证地区编码错误")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            //判断最后一位
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -96,12 +96,12 @@ public class IdCardNoValidatorUtils { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            iDCardNo = iDCardNo + strVerifyCode; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (idCardNo.length() == 18 && !iDCardNo.equals(idCardNo)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.error(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证无效,不是合法的身份证号码")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                logger.warn(String.format("校验身份证号:%s错误:%s", idCardNo, "身份证无效,不是合法的身份证号码")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                return false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } catch (Exception e) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            logger.error(String.format("校验身份证号方法异常")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            logger.warn(String.format("校验身份证号方法异常")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            e.printStackTrace(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return true; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |