Guest User

Untitled

a guest
Oct 17th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.20 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4. * 关于身份证的处理类
  5. */
  6. class IdCard
  7. {
  8.  
  9. /**
  10. * 根据身份证号码获取性别
  11. *
  12. * @param string $number 身份证号码
  13. * @return int $sex 性别 1男 2女 0未知
  14. */
  15. public static function GetSex($number)
  16. {
  17. if (empty($number)) return null;
  18. $sex = (int)substr($number, 16, 1);
  19. return $sex % 2 === 0 ? '女' : '男';
  20. }
  21.  
  22. /**
  23. * 根据身份证号码获取生日
  24. *
  25. * @param string $number 身份证号码
  26. * @return string
  27. */
  28. public static function GetBirthday($number)
  29. {
  30. if (empty($number)) return null;
  31. $bir = substr($number, 6, 8);
  32. $year = (int)substr($bir, 0, 4);
  33. $month = (int)substr($bir, 4, 2);
  34. $day = (int)substr($bir, 6, 2);
  35. $birthday = $year . "-" . $month . "-" . $day;
  36. return $birthday;
  37. }
  38.  
  39. /**
  40. * 身份证号码中提取年龄
  41. *
  42. * @param $number
  43. * @return integer
  44. */
  45. public static function GetAge($number)
  46. {
  47. if (empty($number)) return 0;
  48. $date = strtotime(substr($number, 6, 8));
  49. $today = strtotime('today');
  50. $diff = floor(($today - $date) / 86400 / 365);
  51. $age = strtotime(substr($number, 6, 8) . ' +' . $diff . 'years') > $today ? ($diff + 1) : $diff;
  52. return $age;
  53. }
  54.  
  55. /**
  56. * 判断字符串是否是身份证号
  57. *
  58. * @param $number | 身份证号码
  59. * @return array
  60. */
  61. public static function isIdCard($number)
  62. {
  63. try {
  64.  
  65. $vCity = array(
  66. '11','12','13','14','15','21','22',
  67. '23','31','32','33','34','35','36',
  68. '37','41','42','43','44','45','46',
  69. '50','51','52','53','54','61','62',
  70. '63','64','65','71','81','82','91'
  71. );
  72. //中国大陆,香港,澳门,
  73.  
  74. //中国大陆
  75. # /^([\d]{17}[xX\d]|[\d]{15})$/
  76.  
  77. //香港身份证正则
  78. # ^((\s?[A-Za-z])|([A-Za-z]{2}))\d{6}((\([0-9aA]\))|([0-9aA]))$
  79.  
  80. //台湾
  81. # /^[a-zA-Z][0-9]{9}$/
  82.  
  83. //澳门
  84. # /^[1|5|7][0-9]{6}\([0-9Aa]\)/
  85.  
  86. if (!preg_match('/^([\d]{17}[xX\d]|[\d]{15})$/', $number)) {
  87. return ['code' => 400,'msg' => '身份证号码不正确,请修改身份证号码'];
  88. }
  89. if (!in_array(substr($number, 0, 2), $vCity)) {
  90. return ['code' => 400,'msg' => '身份证号码不正确,请修改身份证号码'];
  91. }
  92. $vStr = preg_replace('/[xX]$/i', 'a', $number);
  93. $vLength = strlen($vStr);
  94. if ($vLength == 18) {
  95. $vBirthday = substr($vStr, 6, 4) . '-' . substr($vStr, 10, 2) . '-' . substr($vStr, 12, 2);
  96. } else {
  97. $vBirthday = '19' . substr($vStr, 6, 2) . '-' . substr($vStr, 8, 2) . '-' . substr($vStr, 10, 2);
  98. }
  99. if (date('Y-m-d', strtotime($vBirthday)) != $vBirthday) {
  100. return ['code' => 400,'msg' => '身份证号码不正确,请修改身份证号码'];
  101. }
  102. if ($vLength == 18) {
  103. $vSum = 0;
  104. for ($i = 17 ; $i >= 0 ; $i--) {
  105. $vSubStr = substr($vStr, 17 - $i, 1);
  106. $vSum += (pow(2, $i) % 11) * (($vSubStr == 'a') ? 10 : intval($vSubStr , 11));
  107. }
  108. if($vSum % 11 != 1) {
  109. return ['code' => 400,'msg' => '身份证号码不正确,请修改身份证号码'];
  110. }
  111. }
  112. return ['code' => 0,'msg' => ''];
  113. } catch (\Exception $e) {
  114. return ['code' => 400,'msg' => '身份证号码不正确,请修改身份证号码'];
  115. }
  116. }
  117.  
  118. /**
  119. * 根据身份证号,返回对应的生肖
  120. *
  121. * @param string $number 身份证号码
  122. * @return string
  123. */
  124. public static function GetZodiac($number)
  125. {
  126. if (empty($number)) return null;
  127. $start = 1901;
  128. $end = (int)substr($number, 6, 4);
  129. $x = ($start - $end) % 12;
  130. $val = '';
  131. if ($x == 1 || $x == -11) $val = '鼠';
  132. if ($x == 0) $val = '牛';
  133. if ($x == 11 || $x == -1) $val = '虎';
  134. if ($x == 10 || $x == -2) $val = '兔';
  135. if ($x == 9 || $x == -3) $val = '龙';
  136. if ($x == 8 || $x == -4) $val = '蛇';
  137. if ($x == 7 || $x == -5) $val = '马';
  138. if ($x == 6 || $x == -6) $val = '羊';
  139. if ($x == 5 || $x == -7) $val = '猴';
  140. if ($x == 4 || $x == -8) $val = '鸡';
  141. if ($x == 3 || $x == -9) $val = '狗';
  142. if ($x == 2 || $x == -10) $val = '猪';
  143. return $val;
  144. }
  145.  
  146.  
  147. /**
  148. * 根据身份证号,返回对应的星座
  149. *
  150. * @param string $number 身份证号码
  151. * @return string
  152. */
  153. public static function GetStarSign($number)
  154. {
  155. if (empty($number)) return null;
  156. $b = substr($number, 10, 4);
  157. $m = (int)substr($b, 0, 2);
  158. $d = (int)substr($b, 2);
  159. $val = '';
  160. if (($m == 1 && $d <= 21) || ($m == 2 && $d <= 19)) {
  161. $val = "水瓶座";
  162. } else if (($m == 2 && $d > 20) || ($m == 3 && $d <= 20)) {
  163. $val = "双鱼座";
  164. } else if (($m == 3 && $d > 20) || ($m == 4 && $d <= 20)) {
  165. $val = "白羊座";
  166. } else if (($m == 4 && $d > 20) || ($m == 5 && $d <= 21)) {
  167. $val = "金牛座";
  168. } else if (($m == 5 && $d > 21) || ($m == 6 && $d <= 21)) {
  169. $val = "双子座";
  170. } else if (($m == 6 && $d > 21) || ($m == 7 && $d <= 22)) {
  171. $val = "巨蟹座";
  172. } else if (($m == 7 && $d > 22) || ($m == 8 && $d <= 23)) {
  173. $val = "狮子座";
  174. } else if (($m == 8 && $d > 23) || ($m == 9 && $d <= 23)) {
  175. $val = "处女座";
  176. } else if (($m == 9 && $d > 23) || ($m == 10 && $d <= 23)) {
  177. $val = "天秤座";
  178. } else if (($m == 10 && $d > 23) || ($m == 11 && $d <= 22)) {
  179. $val = "天蝎座";
  180. } else if (($m == 11 && $d > 22) || ($m == 12 && $d <= 21)) {
  181. $val = "射手座";
  182. } else if (($m == 12 && $d > 21) || ($m == 1 && $d <= 20)) {
  183. $val = "魔羯座";
  184. }
  185. return $val;
  186. }
  187.  
  188. }
Add Comment
Please, Sign In to add comment