要实现一个 PHP 函数来验证身份证号码并提取年龄,可以使用以下代码:
/**
* 验证身份证号码并提取年龄
* @param $id
* @return false|int|string
*/
function isIdno($id){
$id = strtoupper($id);
$regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/";
$arr_split = array();
if(!preg_match($regx, $id)){
return false;
}
if(15==strlen($id)){//检查15位
$regx = "/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/";
@preg_match($regx, $id, $arr_split);
//检查生日日期是否正确
$dtm_birth = "19".$arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4];
if(!strtotime($dtm_birth)) {
return false;
}else{
//提取年龄
$age = date("Y") - (int)substr($id, 6, 2);
return $age;
}
}else{//检查18位
$regx = "/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/";
@preg_match($regx, $id, $arr_split);
$dtm_birth = $arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4];
if(!strtotime($dtm_birth)){//检查生日日期是否正确
return false;
}else{
//提取年龄
$age = date("Y") - (int)substr($id, 6, 4);
return $age;
}
}
}
主要实现原理是:首先将身份证号码转换为大写,然后使用正则表达式检查其格式是否正确。如果格式正确,函数将检查出生日期是否正确,然后根据身份证号码的长度进行不同的处理。如果出生日期正确,函数将提取并返回年龄。如果出生日期不正确,函数将返回 false。