作者:蜡笔小昕廖廖 | 来源:互联网 | 2018-03-23 00:48
1. [文件]
check.class.php
1. [文件]
check.class.php
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;
}
}
}else if($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(&#39;19&#39;.$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,&#39;x&#39;,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) == &#39;string&#39;){
$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 = &#39;350322199001282536&#39;;
// 1为男,2为女,不输入为不验证
$sex = 1;
$test = new check();
$data = $test ->checkIdentity($num,$sex);
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。