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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.