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];
	   }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值