使用php从身份证号中获取一系列线索(星座、生肖、生日等)
本文第一个实例为大家分享了PHP根据身份证号,自动获取对应的星座函数,供大家参考,具体内容如下
<?php functionget_xingzuo($cid){//根据身份证号,自动返回对应的星座 if(!isIdCard($cid))return''; $bir=substr($cid,10,4); $month=(int)substr($bir,0,2); $day=(int)substr($bir,2); $strValue=''; if(($month==1&&$day>=20)||($month==2&&$day<=18)){ $strValue="水瓶座"; }elseif(($month==2&&$day>=19)||($month==3&&$day<=20)){ $strValue="双鱼座"; }elseif(($month==3&&$day>20)||($month==4&&$day<=19)){ $strValue="白羊座"; }elseif(($month==4&&$day>=20)||($month==5&&$day<=20)){ $strValue="金牛座"; }elseif(($month==5&&$day>=21)||($month==6&&$day<=21)){ $strValue="双子座"; }elseif(($month==6&&$day>21)||($month==7&&$day<=22)){ $strValue="巨蟹座"; }elseif(($month==7&&$day>22)||($month==8&&$day<=22)){ $strValue="狮子座"; }elseif(($month==8&&$day>=23)||($month==9&&$day<=22)){ $strValue="处女座"; }elseif(($month==9&&$day>=23)||($month==10&&$day<=23)){ $strValue="天秤座"; }elseif(($month==10&&$day>23)||($month==11&&$day<=22)){ $strValue="天蝎座"; }elseif(($month==11&&$day>22)||($month==12&&$day<=21)){ $strValue="射手座"; }elseif(($month==12&&$day>21)||($month==1&&$day<=19)){ $strValue="魔羯座"; } return$strValue; } functionget_shengxiao($cid){//根据身份证号,自动返回对应的生肖 if(!isIdCard($cid))return''; $start=1901; $end=$end=(int)substr($cid,6,4); $x=($start-$end)%12; $value=""; if($x==1||$x==-11){$value="鼠";} if($x==0){$value="牛";} if($x==11||$x==-1){$value="虎";} if($x==10||$x==-2){$value="兔";} if($x==9||$x==-3){$value="龙";} if($x==8||$x==-4){$value="蛇";} if($x==7||$x==-5){$value="马";} if($x==6||$x==-6){$value="羊";} if($x==5||$x==-7){$value="猴";} if($x==4||$x==-8){$value="鸡";} if($x==3||$x==-9){$value="狗";} if($x==2||$x==-10){$value="猪";} return$value; } functionget_xingbie($cid){//根据身份证号,自动返回性别 if(!isIdCard($cid))return''; $sexint=(int)substr($cid,16,1); return$sexint%2===0?'女':'男'; } functionisIdCard($number){//检查是否是身份证号 //转化为大写,如出现x $number=strtoupper($number); //加权因子 $wi=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2); //校验码串 $ai=array('1','0','X','9','8','7','6','5','4','3','2'); //按顺序循环处理前17位 $sigma=0; for($i=0;$i<17;$i++){ //提取前17位的其中一位,并将变量类型转为实数 $b=(int)$number{$i}; //提取相应的加权因子 $w=$wi[$i]; //把从身份证号码中提取的一位数字和加权因子相乘,并累加 $sigma+=$b*$w; } //计算序号 $snumber=$sigma%11; //按照序号从校验码串中提取相应的字符。 $check_number=$ai[$snumber]; if($number{17}==$check_number){ returntrue; }else{ returnfalse; } } ?>
第二个实例:用php从身份证中提取生日,包括15位和18位身份证:
functiongetIDCardInfo($IDCard,$format=1){ $result['error']=0;//0:未知错误,1:身份证格式错误,2:无错误 $result['flag']='';//0标示成年,1标示未成年 $result['tdate']='';//生日,格式如:2012-11-15 if(!preg_match("/^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/",$IDCard)){ $result['error']=1; return$result; }else{ if(strlen($IDCard)==18) { $tyear=intval(substr($IDCard,6,4)); $tmonth=intval(substr($IDCard,10,2)); $tday=intval(substr($IDCard,12,2)); } elseif(strlen($IDCard)==15) { $tyear=intval("19".substr($IDCard,6,2)); $tmonth=intval(substr($IDCard,8,2)); $tday=intval(substr($IDCard,10,2)); } if($tyear>date("Y")||$tyear<(date("Y")-100)) { $flag=0; } elseif($tmonth<0||$tmonth>12) { $flag=0; } elseif($tday<0||$tday>31) { $flag=0; }else { if($format) { $tdate=$tyear."-".$tmonth."-".$tday; } else { $tdate=$tmonth."-".$tday; } if((time()-mktime(0,0,0,$tmonth,$tday,$tyear))>18*365*24*60*60) { $flag=0; } else { $flag=1; } } } $result['error']=2;//0:未知错误,1:身份证格式错误,2:无错误 $result['isAdult']=$flag;//0标示成年,1标示未成年 $result['birthday']=$tdate;//生日日期 return$result; }
最后一个实例:php提取身份证号码中的生日日期以及确定是否成年的一个函数。可以同时确定15位和18位的身份证,经本人亲测,非常好用,分享函数代码如下:
<?php //用php从身份证中提取生日,包括位和位身份证 functiongetIDCardInfo($IDCard){ $result['error']=;//:未知错误,:身份证格式错误,:无错误 $result['flag']='';//标示成年,标示未成年 $result['tdate']='';//生日,格式如:-- if(!eregi("^[-]([-a-zA-Z]{}|[-a-zA-Z]{})$",$IDCard)){ $result['error']=; return$result; }else{ if(strlen($IDCard)==){ $tyear=intval(substr($IDCard,,)); $tmonth=intval(substr($IDCard,,)); $tday=intval(substr($IDCard,,)); if($tyear>date("Y")||$tyear<(date("Y")-)){ $flag=; }elseif($tmonth<||$tmonth>){ $flag=; }elseif($tday<||$tday>){ $flag=; }else{ $tdate=$tyear."-".$tmonth."-".$tday."::"; if((time()-mktime(,,,$tmonth,$tday,$tyear))>****){ $flag=; }else{ $flag=; } } }elseif(strlen($IDCard)==){ $tyear=intval("".substr($IDCard,,)); $tmonth=intval(substr($IDCard,,)); $tday=intval(substr($IDCard,,)); if($tyear>date("Y")||$tyear<(date("Y")-)){ $flag=; }elseif($tmonth<||$tmonth>){ $flag=; }elseif($tday<||$tday>){ $flag=; }else{ $tdate=$tyear."-".$tmonth."-".$tday."::"; if((time()-mktime(,,,$tmonth,$tday,$tyear))>****){ $flag=; }else{ $flag=; } } } } $result['error']=;//:未知错误,:身份证格式错误,:无错误 $result['isAdult']=$flag;//标示成年,标示未成年 $result['birthday']=$tdate;//生日日期 return$result; }
用法如下:
getIDCardInfo('身份证号码');
以上代码就是小编跟大家分享的php提取身份证号码中的生日日期以及验证是否为成年人的函数,希望对大家有用。