使用php从身份证号中获取一系列线索(星座、生肖、生日等)


Posted in PHP onMay 11, 2016

本文第一个实例为大家分享了PHP根据身份证号,自动获取对应的星座函数,供大家参考,具体内容如下

<?php

function get_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 = "水瓶座";
  } else if (($month == 2 && $day >= 19) || ($month == 3 && $day <= 20)) {
    $strValue = "双鱼座";
  } else if (($month == 3 && $day > 20) || ($month == 4 && $day <= 19)) {
    $strValue = "白羊座";
  } else if (($month == 4 && $day >= 20) || ($month == 5 && $day <= 20)) {
    $strValue = "金牛座";
  } else if (($month == 5 && $day >= 21) || ($month == 6 && $day <= 21)) {
    $strValue = "双子座";
  } else if (($month == 6 && $day > 21) || ($month == 7 && $day <= 22)) {
    $strValue = "巨蟹座";
  } else if (($month == 7 && $day > 22) || ($month == 8 && $day <= 22)) {
    $strValue = "狮子座";
  } else if (($month == 8 && $day >= 23) || ($month == 9 && $day <= 22)) {
    $strValue = "处女座";
  } else if (($month == 9 && $day >= 23) || ($month == 10 && $day <= 23)) {
    $strValue = "天秤座";
  } else if (($month == 10 && $day > 23) || ($month == 11 && $day <= 22)) {
    $strValue = "天蝎座";
  } else if (($month == 11 && $day > 22) || ($month == 12 && $day <= 21)) {
    $strValue = "射手座";
  } else if (($month == 12 && $day > 21) || ($month == 1 && $day <= 19)) {
    $strValue = "魔羯座";
  }
  return $strValue;
   
}
function get_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;
}
function get_xingbie($cid) { //根据身份证号,自动返回性别
  if (!isIdCard($cid)) return '';
  $sexint = (int)substr($cid,16,1);
   
  return $sexint % 2 === 0 ? '女' : '男';
}
function isIdCard($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) {
    return true;
  } else {
    return false;
  }
}
?>

第二个实例:用php从身份证中提取生日,包括15位和18位身份证:

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

PHP 相关文章推荐
回答PHPCHINA上的几个问题:URL映射
Feb 14 PHP
php 批量替换程序的具体实现代码
Oct 04 PHP
thinkphp3查询mssql数据库乱码解决方法分享
Feb 11 PHP
PHP读取大文件的类SplFileObject使用介绍
Apr 09 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
Jul 02 PHP
PHP SOCKET编程详解
May 22 PHP
php算法实例分享
Jul 14 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
php导出生成word的方法
Dec 25 PHP
PHP获取用户访问IP地址的5种方法
May 16 PHP
PHP children()函数讲解
Feb 03 PHP
PHP implode()函数用法讲解
Mar 08 PHP
PHP数据库操作Helper类完整实例
May 11 #PHP
PHP查询附近的人及其距离的实现方法
May 11 #PHP
Smarty分页实现方法完整实例
May 11 #PHP
php简单获取复选框值的方法
May 11 #PHP
php上传图片类及用法示例
May 11 #PHP
php通过smtp邮件验证登陆的方法
May 11 #PHP
Smarty变量用法详解
May 11 #PHP
You might like
2021年最新CPU天梯图
2021/03/04 数码科技
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
php实现用于删除整个目录的递归函数
2015/03/16 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
基于jQuery的history历史记录插件
2010/12/11 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
[54:08]LGD女子刀塔学院 DOTA2炼金术士教学
2014/01/09 DOTA
[01:25:38]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第一场 1月19日
2021/03/11 DOTA
Python 时间操作例子和时间格式化参数小结
2014/04/24 Python
Python中pygame安装方法图文详解
2015/11/11 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
python利用后缀表达式实现计算器功能
2021/02/22 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
梵蒂冈和罗马卡:Omnia Card Pass
2018/02/10 全球购物
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
静态变量和实例变量的区别
2015/07/07 面试题
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
农民致富事迹材料
2014/01/23 职场文书
酒店营销策划方案
2014/02/07 职场文书
中学生自我评价范文
2014/02/08 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
广告语设计及教案
2014/03/21 职场文书
离婚协议书格式
2014/11/21 职场文书
2015年护士节活动策划方案
2015/05/04 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
python cv2图像质量压缩的算法示例
2021/06/04 Python