JAVA判断身份证号是否合法

		public boolean validate(String idCardNo) {
			// 对身份证号进行长度等简单判断
		    if (idCardNo == null || !PARTTERN_CARD_NO.matcher(idCardNo).matches()) {
		         return false;
		      }
		      int len = idCardNo.length();
		      // 一代身份证
		      if (len == 15) {
		         return PARTTERN_DATE.matcher("19" + idCardNo.substring(6, 12)).matches();
		      }
		      // 二代身份证
		      if (len == 18 && PARTTERN_DATE.matcher(idCardNo.substring(6, 14)).matches()) {
		         // 判断随机码是否相等
		         return calculateRandom(idCardNo) == idCardNo.charAt(17);
		      } else {
		         return false;
		      }
		}
		
		
	   /**
	    * 计算最后一位随机码
	    * @param idCardNo
	    * @return
	    */
	   private char calculateRandom(String idCardNo) {
	      // 计算1-17位与相应因子乘积之和
	      int total = 0;
	      for (int i = 0; i < 17; i++) {
	         total += Character.getNumericValue(idCardNo.charAt(i)) * FACTOR[i];
	      }
	      // 判断随机码是否相等
	      return RANDOM[total % 11];
	   }

}

猜你喜欢

转载自blog.csdn.net/Abracadabra__/article/details/85264658
今日推荐