该代码可以实现身份证的查询,准确性如何就不得而知了,还可以判断是否是一个正确(指逻辑正确)的号码。
<?php
function IDCheck($e){
$arrVerifyCode = explode(",","1,0,x,9,8,7,6,5,4,3,2");
$Wi = explode(",","7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2");
$Checker = explode(",","1,9,8,7,6,5,4,3,2,1,1");
$len=strlen($e);
if($len!==15 && $len!==18)return false;
if($len == 18){
$ai = substr($e, 0, 17);
}elseIf($len == 15){
$ai = $e;
$ai = substr($ai, 0,6) . "19" . substr($ai, 6, 9);
}
//If(Not IsNumeric($ai))return false;
$strYear = substr($ai, 7, 4);
$strMonth = substr($ai, 11, 2);
$strDay = substr($ai, 13, 2);
if(checkdate($strMonth,$strDay,$strYear ))return false;
for($i = 0;$i<17;$i++){
$TotalmulAiWi += substr($ai, $i, 1)*$Wi[$i];
}
$modValue = $TotalmulAiWi % 11;
$strVerifyCode = $arrVerifyCode[$modValue];
$ai .= $strVerifyCode;
// If(strlen($e) == 18 && $e <> $ai)return false;
return $ai;
}
function getRegion($id){
$info=file('./info.txt');
$regions=array();
foreach($info as $line){
list($region_code,$addr)=explode('|',$line);
$regions[$region_code]=trim($addr);
}
$adr=substr($id,0,6);
if($adr{5}=='0'){
return '身份证号码错误';
}
$prov=$city=$county='';
$prov=$regions[substr($id,0,2).'0000'];
$city=$regions[substr($id,0,4).'00'];
$county=$regions[substr($id,0,6)];
if(!$city || !$prov || !$county){
return '身份证号码错误';
}
if($city==$prov){
return sprintf('%s-%s',$prov,$county);
}else{
return sprintf('%s-%s-%s',$prov,$city,$county);
}
}
function getGender($idc){
$idclen=strlen($idc);
if(15 == $idclen){
if(0 <> $idc[$idclen-1]%2){
return "男";
}else{
return "女";
}
}elseif(18 == $idclen){
if(0 <> $idc[$idclen-2]%2){
return "男";
}else{
return "女";
}
}
}
function getBirthday($idc){
$idclen=strlen($idc);
if(15 == $idclen){
preg_match('/^\d{6}(\d{2})(\d{2})(\d{2})\d{3}$/',$idc,$a);
$y='19'.$a[1];
$m=$a[2];
$d=$a[3];
}elseif(18 == $idclen){
preg_match('/^\d{6}(\d{4})(\d{2})(\d{2})\d{3}[\dxX]$/',$idc,$a);
$y=$a[1];
$m=$a[2];
$d=$a[3];
}else{
$y=$m=$d=0;
}
return sprintf('%s年%s月%s日',$y,$m,$d);
}
function getIDInfo($id){
$idc=IDCheck($id);
if($idc){
$json=array(
'InputID'=>$id,
'OutputID'=>$idc,
'Birthday'=>getBirthday($idc),
'Gender'=>getGender($idc),
'Address'=>getRegion($idc),
'Error'=>'',
'Warning'=>''
);
if($idc!==$id){
$json['Warning']='ID错误';
}
}else{
$json=array(
'InputID'=>$id,
'OutputID'=>'',
'Birthday'=>'',
'Gender'=>'',
'Address'=>'',
'Error'=>'ID错误',
'Warning'=>''
);
}
return $json;
}
$id=strtolower(trim($_GET['id']));
if(!preg_match('/^\d{15}(\d{2}[\dx]?)?$/',$id)){
$json=array(
'InputID'=>$id,
'OutputID'=>'',
'Birthday'=>'',
'Gender'=>'',
'Address'=>'',
'Error'=>'ID错误',
'Warning'=>''
);
}else{
$json=getIDInfo($id);
}
echo json_encode($json);
?>