Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * 关于身份证的处理类
- */
- class IdCard
- {
- /**
- * 根据身份证号码获取性别
- *
- * @param string $number 身份证号码
- * @return int $sex 性别 1男 2女 0未知
- */
- public static function GetSex($number)
- {
- if (empty($number)) return null;
- $sex = (int)substr($number, 16, 1);
- return $sex % 2 === 0 ? '女' : '男';
- }
- /**
- * 根据身份证号码获取生日
- *
- * @param string $number 身份证号码
- * @return string
- */
- public static function GetBirthday($number)
- {
- if (empty($number)) return null;
- $bir = substr($number, 6, 8);
- $year = (int)substr($bir, 0, 4);
- $month = (int)substr($bir, 4, 2);
- $day = (int)substr($bir, 6, 2);
- $birthday = $year . "-" . $month . "-" . $day;
- return $birthday;
- }
- /**
- * 身份证号码中提取年龄
- *
- * @param $number
- * @return integer
- */
- public static function GetAge($number)
- {
- if (empty($number)) return 0;
- $date = strtotime(substr($number, 6, 8));
- $today = strtotime('today');
- $diff = floor(($today - $date) / 86400 / 365);
- $age = strtotime(substr($number, 6, 8) . ' +' . $diff . 'years') > $today ? ($diff + 1) : $diff;
- return $age;
- }
- /**
- * 判断字符串是否是身份证号
- *
- * @param $number | 身份证号码
- * @return array
- */
- public static function isIdCard($number)
- {
- try {
- $vCity = array(
- '11','12','13','14','15','21','22',
- '23','31','32','33','34','35','36',
- '37','41','42','43','44','45','46',
- '50','51','52','53','54','61','62',
- '63','64','65','71','81','82','91'
- );
- //中国大陆,香港,澳门,
- //中国大陆
- # /^([\d]{17}[xX\d]|[\d]{15})$/
- //香港身份证正则
- # ^((\s?[A-Za-z])|([A-Za-z]{2}))\d{6}((\([0-9aA]\))|([0-9aA]))$
- //台湾
- # /^[a-zA-Z][0-9]{9}$/
- //澳门
- # /^[1|5|7][0-9]{6}\([0-9Aa]\)/
- if (!preg_match('/^([\d]{17}[xX\d]|[\d]{15})$/', $number)) {
- return ['code' => 400,'msg' => '身份证号码不正确,请修改身份证号码'];
- }
- if (!in_array(substr($number, 0, 2), $vCity)) {
- return ['code' => 400,'msg' => '身份证号码不正确,请修改身份证号码'];
- }
- $vStr = preg_replace('/[xX]$/i', 'a', $number);
- $vLength = strlen($vStr);
- if ($vLength == 18) {
- $vBirthday = substr($vStr, 6, 4) . '-' . substr($vStr, 10, 2) . '-' . substr($vStr, 12, 2);
- } else {
- $vBirthday = '19' . substr($vStr, 6, 2) . '-' . substr($vStr, 8, 2) . '-' . substr($vStr, 10, 2);
- }
- if (date('Y-m-d', strtotime($vBirthday)) != $vBirthday) {
- return ['code' => 400,'msg' => '身份证号码不正确,请修改身份证号码'];
- }
- if ($vLength == 18) {
- $vSum = 0;
- for ($i = 17 ; $i >= 0 ; $i--) {
- $vSubStr = substr($vStr, 17 - $i, 1);
- $vSum += (pow(2, $i) % 11) * (($vSubStr == 'a') ? 10 : intval($vSubStr , 11));
- }
- if($vSum % 11 != 1) {
- return ['code' => 400,'msg' => '身份证号码不正确,请修改身份证号码'];
- }
- }
- return ['code' => 0,'msg' => ''];
- } catch (\Exception $e) {
- return ['code' => 400,'msg' => '身份证号码不正确,请修改身份证号码'];
- }
- }
- /**
- * 根据身份证号,返回对应的生肖
- *
- * @param string $number 身份证号码
- * @return string
- */
- public static function GetZodiac($number)
- {
- if (empty($number)) return null;
- $start = 1901;
- $end = (int)substr($number, 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;
- }
- /**
- * 根据身份证号,返回对应的星座
- *
- * @param string $number 身份证号码
- * @return string
- */
- public static function GetStarSign($number)
- {
- if (empty($number)) return null;
- $b = substr($number, 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;
- }
- }
Add Comment
Please, Sign In to add comment