要实现一个 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;
}
}
}
Das Hauptprinzip der Implementierung besteht darin, zuerst die ID-Nummer in Großbuchstaben umzuwandeln und dann mithilfe regulärer Ausdrücke zu überprüfen, ob das Format korrekt ist. Wenn das Format korrekt ist, prüft die Funktion, ob das Geburtsdatum korrekt ist, und führt dann basierend auf der Länge der ID-Nummer eine unterschiedliche Verarbeitung durch. Wenn das Geburtsdatum korrekt ist, extrahiert die Funktion das Alter und gibt es zurück. Wenn das Geburtsdatum falsch ist, gibt die Funktion false zurück.