当前位置: 首页 > 后端技术 > PHP

php验证手机号

时间:2023-03-29 15:23:43 PHP

最近公司让我把身份证验证改成严格验证。一开始我是用网上找的身份证正则验证来验证的:/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/然而,老板说这次验证没有进行严格的身份证验证。这个验证只是验证身份证的格式是否正确,并不能判断身份证号码的格式是否正确?下面是严格验证身份证号的验证方法:/***function:checkNum*author:wangjian*date:2019/4/1615:21*检查身份证号是否正确*/functioncheckNum($num_id){$num_id=strtoupper($num_id);$regx="/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/";$arr_split=数组();if(!preg_match($regx,$num_id)){returnFALSE;//常规检查}if(15==strlen($num_id))//检查15位数字{$regx="/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/";@preg_match($regx,$num_id,$arr_split);//检查出生日期是否正确$dtm_birth="19".$arr_split[2].'/'.$arr_split[3]。'/'.$arr_split[4];如果(!strtotime($dtm_birth)){返回FALSE;}else{返回真;}}else//检查18位{$regx="/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/";@preg_match($regx,$num_id,$arr_split);$dtm_birth=$arr_split[2]。'/'。$arr_split[3]。'/'.$arr_split[4];if(!strtotime($dtm_birth))//检查生日日期是否正确{returnFALSE;}else{//检查18位身份证校验码是否正确//校验位是根据ISO7064:1983.MOD11-2的规定生成的,X可视为数字10.$arr_int=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);$arr_ch=array('1','0','X','9','8','7','6','5','4','3','2');$符号=0;对于($i=0;$i<17;$i++){$b=(int)$num_id{$i};$w=$arr_int[$i];$sign+=$b*$w;}$n=$sign%11;$val_num=$arr_ch[$n];如果($val_num!=substr($num_id,17,1)){返回FALSE;}else{返回真;}}}}如果只需要简单的collect来验证身份证号,只需要使用上面的正则规则进行验证即可。如果需要严格验证,可以使用上面的验证方式进行验证。