PHP 根據身份證號碼,獲取性別泰涂、獲取生日鲫竞、計算年齡、獲取地址逼蒙、獲取生肖从绘、獲取星座、以及判斷是否是身份證號(方法教程)

1是牢、PHP根據身份證號碼僵井,獲取性別。

2驳棱、PHP根據身份證號碼批什,獲取生日。

3社搅、PHP根據身份證號碼驻债,計算年齡。

4罚渐、PHP根據身份證號碼却汉,獲取地址。

5荷并、PHP判斷字符串合砂,是不是身份證號碼。

6源织、PHP根據身份證號碼翩伪,獲取生肖。

7谈息、PHP根據身份證號碼缘屹,獲取星座。

<?php
 
/**
 *  根據身份證號碼獲取性別
 *  author:xiaochuan
 *  @param string $idcard    身份證號碼
 *  @return int $sex 性別 1男 2女 0未知
 */
function get_sex($idcard) {
    if(empty($idcard)) return null; 
    $sexint = (int) substr($idcard, 16, 1);
    return $sexint % 2 === 0 ? '女' : '男';
}
 
/**
 *  根據身份證號碼獲取生日
 *  author:xiaochuan
 *  @param string $idcard    身份證號碼
 *  @return $birthday
 */
function get_birthday($idcard) {
    if(empty($idcard)) return null; 
    $bir = substr($idcard, 6, 8);
    $year = (int) substr($bir, 0, 4);
    $month = (int) substr($bir, 4, 2);
    $day = (int) substr($bir, 6, 2);
    return $year . "-" . $month . "-" . $day;
}
 
/**
 *  根據身份證號碼計算年齡
 *  author:xiaochuan
 *  @param string $idcard    身份證號碼
 *  @return int $age
 */
function get_age($idcard){  
    if(empty($idcard)) return null; 
    #  獲得出生年月日的時間戳 
    $date = strtotime(substr($idcard,6,8));
    #  獲得今日的時間戳 
    $today = strtotime('today');
    #  得到兩個日期相差的大體年數 
    $diff = floor(($today-$date)/86400/365);
    #  strtotime加上這個年數后得到那日的時間戳后與今日的時間戳相比 
    $age = strtotime(substr($idcard,6,8).' +'.$diff.'years')>$today?($diff+1):$diff; 
    return $age; 
} 
 
/**
 *  根據身份證號碼獲取出身地址
 *  author:xiaochuan
 *  @param string $idcard    身份證號碼
 *  @return string $address
 */
function get_address($idcard, $type=1){
    if(empty($idcard)) return null;
    $address = include('./address.php');
    switch ($type) {
        case 1:
                # 截取前六位數(獲取基體到縣區(qū)的地址)
                $key = substr($idcard,0,6);
                if(!empty($address[$key])) return $address[$key];
                # 截取前兩位數(沒有基體到縣區(qū)的地址就獲取省份)
                $key = substr($idcard,0,2); 
                if(!empty($address[$key])) return $address[$key];
                # 都沒有
                return '未知地址';
            break;
        case 2:
                # 截取前兩位數(只獲取省份)
                $key = substr($idcard,0,2); 
                if(!empty($address[$key])) return $address[$key];
            break;
        default:
                return null;
            break;
    }
}
 
/**
 *  判斷字符串是否是身份證號
 *  author:xiaochuan
 *  @param string $idcard    身份證號碼
 */
function isIdCard($idcard){
    #  轉化為大寫侠仇,如出現(xiàn)x
    $idcard = strtoupper($idcard);
    #  加權因子
    $wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
    $ai = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
    #  按順序循環(huán)處理前17位
    $sigma = 0;
    #  提取前17位的其中一位轻姿,并將變量類型轉為實數
    for ($i = 0; $i < 17; $i++) {
        $b = (int)$idcard{$i};
        #  提取相應的加權因子
        $w = $wi[$i];
        #  把從身份證號碼中提取的一位數字和加權因子相乘,并累加
        $sigma += $b * $w;
    }
    #  計算序號
    $sidcard = $sigma % 11;
    #  按照序號從校驗碼串中提取相應的字符逻炊。
    $check_idcard = $ai[$sidcard];
    if ($idcard{17} == $check_idcard) {
        return '是正確的身份證';
    } else {
        return '錯誤的身份證';
    }
}
 
/**
 *  根據身份證號互亮,返回對應的生肖
 *  author:xiaochuan
 *  @param string $idcard    身份證號碼
 */
function get_zodiac($idcard){ //
    if(empty($idcard)) return null;
    $start = 1901;
    $end = (int)substr($idcard, 6, 4);
    $x = ($start - $end) % 12;
    $val = '';
    if ($x == 1 || $x == -11) $val = '鼠';
    if ($x == 0)              $val = '牛';
    if ($x == 11 || $x == -1) $val = '虎';
    if ($x == 10 || $x == -2) $val = '兔';
    if ($x == 9 || $x == -3)  $val = '龍';
    if ($x == 8 || $x == -4)  $val = '蛇';
    if ($x == 7 || $x == -5)  $val = '馬';
    if ($x == 6 || $x == -6)  $val = '羊';
    if ($x == 5 || $x == -7)  $val = '猴';
    if ($x == 4 || $x == -8)  $val = '雞';
    if ($x == 3 || $x == -9)  $val = '狗';
    if ($x == 2 || $x == -10) $val = '豬';
    return $val;
}
 
/**
 *  根據身份證號,返回對應的星座
 *  author:xiaochuan
 *  @param string $idcard    身份證號碼
 */
function get_starsign($idcard){
    if(empty($idcard)) return null;
    $b = substr($idcard, 10, 4);
    $m = (int)substr($b, 0, 2);
    $d = (int)substr($b, 2);
    $val = '';
    if(($m == 1 && $d <= 21) || ($m == 2 && $d <= 19)){
        $val = "水瓶座";
    }else if (($m == 2 && $d > 20) || ($m == 3 && $d <= 20)){
        $val = "雙魚座";
    }else if (($m == 3 && $d > 20) || ($m == 4 && $d <= 20)){
        $val = "白羊座";
    }else if (($m == 4 && $d > 20) || ($m == 5 && $d <= 21)){
        $val = "金牛座";
    }else if (($m == 5 && $d > 21) || ($m == 6 && $d <= 21)){
        $val = "雙子座";
    }else if (($m == 6 && $d > 21) || ($m == 7 && $d <= 22)){
        $val = "巨蟹座";
    }else if (($m == 7 && $d > 22) || ($m == 8 && $d <= 23)){
        $val = "獅子座";
    }else if (($m == 8 && $d > 23) || ($m == 9 && $d <= 23)){
        $val = "處女座";
    }else if (($m == 9 && $d > 23) || ($m == 10 && $d <= 23)){
        $val = "天秤座";
    }else if (($m == 10 && $d > 23) || ($m == 11 && $d <= 22)){
        $val = "天蝎座";
    }else if (($m == 11 && $d > 22) || ($m == 12 && $d <= 21)){
        $val = "射手座";
    }else if (($m == 12 && $d > 21) || ($m == 1 && $d <= 20)){
        $val = "魔羯座";
    }
    return $val;
}
 
 
 
 
 
echo '<br/>性別:'.get_sex('身份證號碼').'<br/>';
echo '<br/>生日:'.get_birthday('身份證號碼').'<br/>';
echo '<br/>年齡:'.get_age('身份證號碼').'<br/>';
echo '<br/>地址:'.get_address('身份證號碼').'<br/>';
echo '<br/>狀態(tài):'.isIdCard('身份證號碼').'<br/>';
echo '<br/>生肖:'.get_zodiac('身份證號碼').'<br/>';
echo '<br/>星座:'.get_starsign('身份證號碼').'<br/>';
 
 
?>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末余素,一起剝皮案震驚了整個濱河市豹休,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桨吊,老刑警劉巖威根,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凤巨,死亡現(xiàn)場離奇詭異,居然都是意外死亡洛搀,警方通過查閱死者的電腦和手機敢茁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姥卢,“玉大人卷要,你說我怎么就攤上這事《懒瘢” “怎么了僧叉?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棺榔。 經常有香客問我瓶堕,道長,這世上最難降的妖魔是什么症歇? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任郎笆,我火速辦了婚禮,結果婚禮上忘晤,老公的妹妹穿的比我還像新娘宛蚓。我一直安慰自己,他們只是感情好设塔,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布凄吏。 她就那樣靜靜地躺著,像睡著了一般闰蛔。 火紅的嫁衣襯著肌膚如雪痕钢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天序六,我揣著相機與錄音任连,去河邊找鬼。 笑死例诀,一個胖子當著我的面吹牛随抠,可吹牛的內容都是我干的。 我是一名探鬼主播繁涂,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼暮刃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了爆土?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤诸蚕,失蹤者是張志新(化名)和其女友劉穎步势,沒想到半個月后氧猬,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡坏瘩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年盅抚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倔矾。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡妄均,死狀恐怖,靈堂內的尸體忽然破棺而出哪自,到底是詐尸還是另有隱情丰包,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布壤巷,位于F島的核電站邑彪,受9級特大地震影響,放射性物質發(fā)生泄漏胧华。R本人自食惡果不足惜寄症,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矩动。 院中可真熱鬧有巧,春花似錦、人聲如沸悲没。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽檀训。三九已至柑潦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間峻凫,已是汗流浹背渗鬼。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荧琼,地道東北人譬胎。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像命锄,于是被迫代替她去往敵國和親堰乔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內容