根据身份证号判断是否已成年(年满18岁)的PHP函数实现
function isAdultByIdCard($idCard) {
// 验证身份证长度(15位或18位)
$length = strlen($idCard);
if (!in_array($length, [15, 18])) {
return false; // 无效身份证号
}
// 提取出生日期
$birthDate = '';
if ($length === 15) {
// 15位:7-12位为年月日(YYMMDD)
$birthDate = '19' . substr($idCard, 6, 6);
} else {
// 18位:7-14位为年月日(YYYYMMDD)
$birthDate = substr($idCard, 6, 8);
}
// 验证日期有效性
$year = (int)substr($birthDate, 0, 4);
$month = (int)substr($birthDate, 4, 2);
$day = (int)substr($birthDate, 6, 2);
if (!checkdate($month, $day, $year)) {
return false; // 无效出生日期
}
// 计算当前日期和出生日期
$today = new DateTime();
$birthday = DateTime::createFromFormat('Y-m-d', "$year-$month-$day");
// 计算年龄
$age = $today->diff($birthday)->y;
// 判断是否成年(年满18岁)
return $age >= 18;
}
// 使用示例
$idCards = [
'11010519491231002X', // 1949年出生(已成年)
'440308200507081234', // 2005年7月8日出生(2025年测试时未成年)
'35010220100615301X' // 2010年6月15日出生(未成年)
];
foreach ($idCards as $idCard) {
$result = isAdultByIdCard($idCard) ? '成年' : '未成年';
echo "身份证: $idCard - $result\n";
}