如何验证二代身份证

第二代身份一般是 18位的,一般由 6位数字地区码,8位数字生日码,3位数字顺序码和 1位数字校验码构成。
结构图如下:

最后一位校验码计算方法如下。
1、先对前17位数字的权求和
S = Sum(Ci * Vi), i = 0, … , 16
Ci:身份证号码上第 i位置的数字值
Vi:表示第 i位置上的“加权因子”

1到 17位的权值

位 Ci 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 16 17
权 Vi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

2、计算模(固定算法)
Y = mod(S, 11)

3、将计算模Y与对应的校验码校验

Y 0 1 2 3 4 5 6 7 8 9 10
校验码 1 0 X 9 8 7 6 5 4 3 2

PHP 算法示例:

function validateIDCard($sIDCard){
	if(18 !== strlen($sIDCard)){
		return false;
	}
	$aExp = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
	$aVerify = array(1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2);
	$iS = 0;
	for($i = 0; $i < 17; $i++){
		$iS += intval($sIDCard[$i]) * $aExp[$i];
	}
	return $sIDCard[17] == $aVerify[$iS % 11];
}

Post a Comment

Your email is never shared. Required fields are marked *

*
*