身份证号验证类,同时支持15位及18位身份证号

来源:互联网 发布:无线网址域名 编辑:程序博客网 时间:2024/05/19 15:20
<?php $ID = new IdNo(); @$id = $_GET['id'] ? $_GET['id'] : '452427791008313';//可自行传值,否则取默认测试身份证号var_dump($ID->checkIdno($id)); class IdNo {       //检证身份证是否正确     public function checkIdno($idNo) {         $idNo = self::ConvertTo18Id($idNo);         if (strlen($idNo) != 18) {             return false;         }           $idBase = substr($idNo, 0, 17);           return (self::getVerifyNum($idBase) == strtoupper(substr($idNo, 17, 1)));     }         //格式化15位身份证号码为18位     public function ConvertTo18Id($idNo) {         $idNo = trim($idNo);           if (strlen($idNo) == 18) {             return $idNo;         }           if (strlen($idNo) != 15) {             return false;         }           // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码         if (array_search(substr($idNo, 12, 3), array('996', '997', '998', '999')) !== false) {             $idNo = substr($idNo, 0, 6) . '18' . substr($idNo, 6, 9);         } else {             $idNo = substr($idNo, 0, 6) . '19' . substr($idNo, 6, 9);         }         $idNo = $idNo.self::getVerifyNum($idNo);         return $idNo;     }       // 计算身份证校验码,根据【国家标准gb 11643-1999】     private function getVerifyNum($idBase) {         if (strlen($idBase) != 17) {             return false;         }         // 加权因子         $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);           // 校验码对应值         $verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');           $checksum = 0;         for ($i = 0; $i < strlen($idBase); $i++) {             $checksum += substr($idBase, $i, 1) * $factor[$i];         }           $mod = $checksum % 11;         $verify_number = $verify_number_list[$mod];           return $verify_number;     } }   ?>

0 0
原创粉丝点击