// 根据身份证号获取生日
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;
}