Heim  >  Artikel  >  Backend-Entwicklung  >  大陆身份证号处理类

大陆身份证号处理类

WBOY
WBOYOriginal
2016-07-25 08:43:571706Durchsuche
包含大陆身份证号15位转18位、身份号有效性检查以及身份证信息提取。
  1. use DateTime;
  2. /**
  3. * 身份证号处理类
  4. * @author WeakSun
  5. */
  6. class Idcard {
  7. static private $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2),
  8. $verify = array(1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2),
  9. $info = array('status' => false, 'info' => '', 'data' => array());
  10. /**
  11. * 验证身份证号码有效性
  12. * @param string $idnum 身份证号码
  13. * @return array
  14. */
  15. public function index($idnum = null) {
  16. switch (strlen($idnum)) {
  17. case 18:
  18. break;
  19. case 15:
  20. $idnum = $this->upgrade($idnum);
  21. break;
  22. default :
  23. return $this->info(false, 'error', $idnum);
  24. }
  25. $info = $this->getInfo($idnum);
  26. $info['status'] = $this->getCode($idnum) == strtoupper(substr($idnum, -1));
  27. return $info;
  28. }
  29. /**
  30. * 获取身份证信息
  31. * @param string $idnum 身份证号码
  32. * @return array
  33. */
  34. public function getInfo($idnum) {
  35. $data = array(
  36. 'id' => $idnum,
  37. 'city' => substr($idnum, 0, 6),
  38. 'birthday' => substr($idnum, 6, 4) . '-' . substr($idnum, 10, 2) . '-' . substr($idnum, 10, 2),
  39. 'sex' => substr($idnum, -2, 1) % 2 ? '男' : '女'
  40. );
  41. $datetime = new DateTime($data['birthday']);
  42. $data['age'] = $datetime->diff(date_create())->format('%y');
  43. return $this->info(true, null, $data);
  44. }
  45. /**
  46. * 15位号码升级18位
  47. * @param string $idnum
  48. * @return array
  49. */
  50. public function upgrade($idnum) {
  51. if (strlen($idnum) != 15) {
  52. $this->info(true, null, $idnum);
  53. } else {
  54. $idnum = array(substr($idnum, 0, 6), 19, substr($idnum, 6));
  55. substr($idnum, -3) > 995 && $idnum[1] --;
  56. $idnum = implode('', $idnum);
  57. }
  58. return $this->info(true, null, $idnum . $this->getCode($idnum));
  59. }
  60. /**
  61. * 获取确认码
  62. * @param string $idnum 身份证号码
  63. * @return string 成功返回确认码,失败返回false
  64. */
  65. protected function getCode($idnum) {
  66. $code = 0;
  67. foreach (str_split($idnum) as $k => $v) {
  68. $code += $v * static::$factor[$k];
  69. }
  70. $index = $code % 11;
  71. return static::$verify[$index];
  72. }
  73. protected function info($status, $msg = null, $data = null) {
  74. $info = static::$info;
  75. empty($msg) || $info['info'] = $msg;
  76. empty($data) || $info['data'] = $data;
  77. if(is_array($status)){
  78. $this->info = array_merge($info, $status);
  79. }elseif(is_bool($status)){
  80. $info['status'] = $status;
  81. }
  82. return $this->info;
  83. }
  84. }
复制代码


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn