php下对港澳台身份证进行验证

public function idcard_check_other($idcard){ 
        $idcard = strtoupper($idcard);
        $idcard = str_replace(array('(',')'), array('(',')'), $idcard);
        preg_match('/^([A-Z])([0-9]{6})\(([A0-9]{1})\)$/', $idcard,$match);//香港
        if ($match && count($match)==4)
        {
            $sum = (ord($match[1])-64)*8;
            $index = 7;
            for($j=0;$j<6;$j++)
            {
                $sum += $match[2]{$j}*$index;
                $index--;
            }
            $get_num = $sum%11;
            if ($get_num==1) $get_num = 'A';
            elseif ($get_num>1) $get_num = 11-$get_num;

            if ($match[3]==$get_num) return true;
            return false;
        }
        preg_match('/^([A-Z])([0-9]{9})$/', $idcard,$taiwan);//中国台湾省
        if ($taiwan && count($taiwan)==3)//首位数字代表性别,男性为1、女性为2
        {
            $area_code = array('A'=>10,'B'=>11,'C'=>12,'D'=>13,'E'=>14,'F'=>15,'G'=>16,'H'=>17,'I'=>34,'J'=>18,'K'=>19,'L'=>20,'M'=>21,'N'=>22,'O'=>35,'P'=>23,'Q'=>24,'R'=>25,'S'=>26,'T'=>27,'U'=>28,'V'=>29,'W'=>32,'X'=>30,'Y'=>31,'Z'=>33);
            $code = $area_code[$taiwan[1]];
            $sum = $code{0} + $code{1}*9;
            $index = 8;
            for($k=1;$k<8;$k++)
            {
                $sum += $taiwan[2]{$k} * $index;
                $index--;
            }

            $get_num = $sum%10;
            if ($get_num==$taiwan[2]{8}) return true;
            return false;
        }
        preg_match('/^[157][0-9]{6}\([0-9]\)$/', $idcard,$aomen);//澳门
        if ($aomen)
        {
            return true;
        }
        return false;
    }

猜你喜欢

转载自blog.csdn.net/qq_32837111/article/details/106905017
今日推荐