PHP 는 신분증 번 호 를 정확하게 검증 할 수 있 는 도구 클래스 예 시 를 실현 합 니 다.

이 사례 는 PHP 가 신분증 번 호 를 정확하게 검증 할 수 있 는 도구 류 를 설명 한다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.

<?php
class check_IdCard {
 // $num      ,$checkSex:1  ,2  ,       
 public function checkIdentity($num, $checkSex = '') { //   15    18         
 if (strlen($num) != 15 && strlen($num) != 18) {
  return false;
 }
 //    
 if (is_numeric($num)) {
  //    15     
  if (strlen($num) == 15) {
  //    (6 )
  $areaNum = substr($num, 0, 6);
  //     (6 )
  $dateNum = substr($num, 6, 6);
  //   (3 )
  $sexNum = substr($num, 12, 3);
  } else {
  //    18     
  //    (6 )
  $areaNum = substr($num, 0, 6);
  //     (8 )
  $dateNum = substr($num, 6, 8);
  //   (3 )
  $sexNum = substr($num, 14, 3);
  //    (1 )
  $endNum = substr($num, 17, 1);
  }
 } else {
  //     
  if (strlen($num) == 15) {
  return false;
  } else {
  //   17    , 18    x
  $check17 = substr($num, 0, 17);
  if (!is_numeric($check17)) {
   return false;
  }
  //   (6 )
  $areaNum = substr($num, 0, 6);
  //     (8 )
  $dateNum = substr($num, 6, 8);
  //   (3 )
  $sexNum = substr($num, 14, 3);
  //    (1 )
  $endNum = substr($num, 17, 1);
  if ($endNum != 'x' && $endNum != 'X') {
   return false;
  }
  }
 }
 //    
 if (isset($areaNum)) {
  if (!$this->checkArea($areaNum)) {
  return false;
  }
 }
 //    
 if (isset($dateNum)) {
  if (!$this->checkDate($dateNum)) {
  return false;
  }
 }
 //   1  ,2  
 if ($checkSex == 1) {
  if (isset($sexNum)) {
  if (!$this->checkSex($sexNum)) {
   return false;
  }
  }
 } elseif ($checkSex == 2) {
  if (isset($sexNum)) {
  if ($this->checkSex($sexNum)) {
   return false;
  }
  }
 }
 //      
 if (isset($endNum)) {
  if (!$this->checkEnd($endNum, $num)) {
  return false;
  }
 }
 return true;
 }
 //     
 private function checkArea($area) {
 $num1 = substr($area, 0, 2);
 $num2 = substr($area, 2, 2);
 $num3 = substr($area, 4, 2);
 //   GB/T2260―999,    11 65
 if (10 < $num1 && $num1 < 66) {
  return true;
 } else {
  return false;
 }
 }
 //       
 private function checkDate($date) {
 if (strlen($date) == 6) {
  $date1 = substr($date, 0, 2);
  $date2 = substr($date, 2, 2);
  $date3 = substr($date, 4, 2);
  $statusY = $this->checkY('19' . $date1);
 } else {
  $date1 = substr($date, 0, 4);
  $date2 = substr($date, 4, 2);
  $date3 = substr($date, 6, 2);
  $nowY = date("Y", time());
  if (1900 < $date1 && $date1 <= $nowY) {
  $statusY = $this->checkY($date1);
  } else {
  return false;
  }
 }
 if (0 < $date2 && $date2 < 13) {
  if ($date2 == 2) {
  //   
  if ($statusY) {
   if (0 < $date3 && $date3 <= 29) {
   return true;
   } else {
   return false;
   }
  } else {
   //   
   if (0 < $date3 && $date3 <= 28) {
   return true;
   } else {
   return false;
   }
  }
  } else {
  $maxDateNum = $this->getDateNum($date2);
  if (0 < $date3 && $date3 <= $maxDateNum) {
   return true;
  } else {
   return false;
  }
  }
 } else {
  return false;
 }
 }
 //     
 private function checkSex($sex) {
 if ($sex % 2 == 0) {
  return false;
 } else {
  return true;
 }
 }
 //   18        
 private function checkEnd($end, $num) {
 $checkHou = array(1, 0, 'x', 9, 8, 7, 6, 5, 4, 3, 2);
 $checkGu = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
 $sum = 0;
 for ($i = 0;$i < 17;$i++) {
  $sum+= (int)$checkGu[$i] * (int)$num[$i];
 }
 $checkHouParameter = $sum % 11;
 if ($checkHou[$checkHouParameter] != $num[17]) {
  return false;
 } else {
  return true;
 }
 }
 //       ,    ,   true    false   
 private function checkY($Y) {
 if (getType($Y) == 'string') {
  $Y = (int)$Y;
 }
 if ($Y % 100 == 0) {
  if ($Y % 400 == 0) {
  return true;
  } else {
  return false;
  }
 } else if ($Y % 4 == 0) {
  return true;
 } else {
  return false;
 }
 }
 //          (   2 )     
 private function getDateNum($month) {
 if ($month == 1 || $month == 3 || $month == 5 || $month == 7 || $month == 8 || $month == 10 || $month == 12) {
  return 31;
 } else if ($month == 2) {
 } else {
  return 30;
 }
 }
}
//   
header("content-type:text/html;charset=utf-8");
$num = '230106199202099035'; //        
$test = new check_IdCard();
$data = $test->checkIdentity($num);
var_dump($data);
//=============  18           :=======================
//1-2  、   、     ;11-65
//3-4    、 、     ;
//5-6  、   、   ;
//7-14      ,  19670401  1967 4 1 ;
//15-17     ,  17     ,    ;
//18     ,0-9 X,       。
//  :
//130503 19670401 0012         : 13   ,05   ,03    ,     1967 4 1 ,    001,2    
//===========15           :=======================
//1-2  、   、     ;
//3-4    、 、     ;
//5-6  、   、   ;
//7-12      ,  670401  1967 4 1 ,   18         ;
//13-15     ,  15     ,    ;
// 18           :          。
//  :
//130503 670401 001   ; 13   ,05   ,03    ,     1967 4 1 ,    001。

실행 결과:
bool(true)
PS:여기 서 비슷 한 온라인 도 구 를 추천 합 니 다.참고 하 시기 바 랍 니 다.
신분증 귀속 지 정보 온라인 조회:
http://tools.jb51.net/bianmin/sfz
또한 본 사이트 의 온라인 도구 애플 릿 에 도 더욱 강력 한 신분증 정보 획득 도구 가 있 습 니 다.관심 이 있 는 친 구 는 다음 과 같은 애플 릿 코드 를 스 캔 하여 볼 수 있 습 니 다.

더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기