php 根据身份证号获取生日
// 根据身份证号获取生日
function getBirthdayByIDNo($idcard)
{
$idCardLength = strlen(trim($idcard));
// 15位身份证验证生日,转换为18位
if ($idCardLength == 15)
{
$sBirthday = '19'.substr($idcard,6,2).'-'.substr($idcard,8,2).'-'.substr($idcard,10,2);
$dd = date('Y-m-d',strtotime($sBirthday));
if($sBirthday != $dd)
{
return false;
}
$idcard = substr($idcard,0,6)."19".substr($idcard,6,9);//15to18
$Bit18 = getVerifyBit($idcard);//算出第18位校验码
$idcard = $idcard.$Bit18;
}
return substr($idcard,6,4).'-'.substr($idcard,10,2).'-'.substr($idcard,12,2);
}
//计算身份证校验码,根据国家标准GB 11643-1999
function getVerifyBit($idcard_base)
{
if(strlen($idcard_base) != 17)
{
return false;
}
//加权因子
$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
//校验码对应值
$verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4','3', '2');
$checksum = 0;
for ($i = 0; $i < strlen($idcard_base); $i++)
{
$checksum += substr($idcard_base, $i, 1) * $factor[$i];
}
$mod = $checksum % 11;
$verify_number = $verify_number_list[$mod];
return $verify_number;
}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。