Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //验证身份证是否有效
- public static function verifyIdentityCard($identityCard)
- {
- $len = strlen($identityCard);
- if ($len != 18) {
- return false;
- }
- $identityCard = strtoupper($identityCard);//兼容小写x
- $identityCardArr = str_split($identityCard, 1);
- //公式 ∑(a[i]*W[i]) mod 11 ( i = 18,17,16 ... 2 ) 最后一位是校验位 1
- //$weight[i]-----表示第 i 位上的权值 W[i] = 2^(i-1) mod 11
- $weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
- $code = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
- $sum = 0;
- for ($i = 0; $i < 17; $i++) {
- $sum += $identityCardArr[$i] * $weight[$i];
- }
- $r = $sum % 11;
- $res = $code[$r];
- //echo "校验位是: ".$res;
- //根据下表找出 R 对应的校验码即为要求身份证号码的校验码C。
- //R 0 1 2 3 4 5 6 7 8 9 10
- //C 1 0 X 9 8 7 6 5 4 3 2
- if ($res == $identityCardArr[17]) {
- return true;
- } else {
- return false;
- }
- }
Add Comment
Please, Sign In to add comment