PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php下对中国内地身份证进行验证大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
//验证身份证是否有效
	public function check_idcard($idcard) {
		if(preg_match('`^[0-9a-zA-Z\(\)]+$`', $idcard)){//基本格式
			//return true;
			if (strlen($idcard) == 18) {
				check18IDCard($idcard); //18位身份证校验码有效性检查
			} elseif ((strlen($idcard) == 15)) {
				$idcard= convertIDCard15to18($idcard);// 将15位身份证升级到18位
				check18IDCard($idcard);//18位身份证校验码有效性检查
			} else {
                return false;
			}
		}else{
		    return false;
		}
	}

//计算身份证的最后一位验证码,根据国家标准Gb 11643-1999
	public function calcIDCardCode($idcardBody) {
		if (strlen($idcardBody) != 17) {
			return false;
		}
		//加权因子
		$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
		//校验码对应值
		$code = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
		$checksum = 0;
		for ($i = 0; $i < strlen($idcardBody); $i++) {
			$checksum += substr($idcardBody, $i, 1) * $factor[$i];
		}
		return $code[$checksum % 11];
	}

// 18位身份证校验码有效性检查
	public function check18IDCard($idcard) {
		if (strlen($idcard) != 18) {
			return false;
		}
		
		$idcardBody = substr($idcard, 0, 17); //身份证主体
		$idcardCode = strtoupper(substr($idcard, 17, 1)); //身份证最后一位的验证码
		
		if (calcIDCardCode($idcardBody) != $idcardCodE) {
			return false;
		} else {
			return true;
		}
	}

// 将15位身份证升级到18位
	public function convertIDCard15to18($idcard) {
		if (strlen($idcard) != 15) {
			return false;
		} else {
			// 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
			if (array_search(substr($idcard, 12, 3), array('996', '997', '998', '999')) !== falsE) {
				$idcard= substr($idcard, 0, 6) . '18' . substr($idcard, 6, 9);
			} else {
				$idcard = substr($idcard, 0, 6) . '19' . substr($idcard, 6, 9);
			}
		}
		$idcard= $idcard. self::calcIDCardCode($idcard);
		return $idcard;
	}

大佬总结

以上是大佬教程为你收集整理的php下对中国内地身份证进行验证全部内容,希望文章能够帮你解决php下对中国内地身份证进行验证所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: