使用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提取身份证号码中的生日日期以及验证是否为成年人的函数,希望对大家有用。