首页 > 编程语言 >PHP根据身份证号码,获取性别、获取生日、计算年龄等多个信息

PHP根据身份证号码,获取性别、获取生日、计算年龄等多个信息

时间:2023-06-28 14:46:04浏览次数:44  
标签:return val substr idcard 获取 && get PHP 性别

/**
 *  根据身份证号码获取性别
 *  @param string $idcard    身份证号码
 *  @return int $sex 性别 1男 2女 0未知
 */
function get_sex($idcard) {
    if(empty($idcard)) return null;
    $sexint = (int) substr($idcard, 16, 1);
    return $sexint % 2 === 0 ? '女' : '男';
}

/**
 *  根据身份证号码获取生日
 *  @param string $idcard    身份证号码
 *  @return $birthday
 */
function get_birthday($idcard) {
    if(empty($idcard)) return null;
    $bir = substr($idcard, 6, 8);
    $year = (int) substr($bir, 0, 4);
    $month = (int) substr($bir, 4, 2);
    $day = (int) substr($bir, 6, 2);
    return $year . '-' . $month . '-' . $day;
}

/**
 *  根据身份证号码计算年龄
 *  @param string $idcard    身份证号码
 *  @return int $age
 */
function get_age($idcard){
    if(empty($idcard)) return null;
    #  获得出生年月日的时间戳
    $date = strtotime(substr($idcard,6,8));
    #  获得今日的时间戳
    $today = strtotime('today');
    #  得到两个日期相差的大体年数
    $diff = floor(($today-$date)/86400/365);
    #  strtotime加上这个年数后得到那日的时间戳后与今日的时间戳相比
    $age = strtotime(substr($idcard,6,8).' +'.$diff.'years')>$today?($diff+1):$diff;
    return $age;
}

/**
 *  判断字符串是否是身份证号
 *  @param string $idcard    身份证号码
 */
function isIdCard($idcard){
    #  转化为大写,如出现x
    $idcard = strtoupper($idcard);
    #  加权因子
    $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;
    #  提取前17位的其中一位,并将变量类型转为实数
    for ($i = 0; $i < 17; $i++) {
        $b = (int)$idcard[$i];
        #  提取相应的加权因子
        $w = $wi[$i];
        #  把从身份证号码中提取的一位数字和加权因子相乘,并累加
        $sigma += $b * $w;
    }
    #  计算序号
    $sidcard = $sigma % 11;
    #  按照序号从校验码串中提取相应的字符。
    $check_idcard = $ai[$sidcard];
    if ($idcard[17] == $check_idcard) {
        return '是正确的身份证';
    } else {
        return '错误的身份证';
    }
}

/**
 *  根据身份证号,返回对应的生肖
 *  @param string $idcard    身份证号码
 */
function get_zodiac($idcard){ //
    if(empty($idcard)) return null;
    $start = 1901;
    $end = (int)substr($idcard, 6, 4);
    $x = ($start - $end) % 12;
    $val = '';
    if ($x == 1 || $x == -11) $val = '鼠';
    if ($x == 0)              $val = '牛';
    if ($x == 11 || $x == -1) $val = '虎';
    if ($x == 10 || $x == -2) $val = '兔';
    if ($x == 9 || $x == -3)  $val = '龙';
    if ($x == 8 || $x == -4)  $val = '蛇';
    if ($x == 7 || $x == -5)  $val = '马';
    if ($x == 6 || $x == -6)  $val = '羊';
    if ($x == 5 || $x == -7)  $val = '猴';
    if ($x == 4 || $x == -8)  $val = '鸡';
    if ($x == 3 || $x == -9)  $val = '狗';
    if ($x == 2 || $x == -10) $val = '猪';
    return $val;
}

/**
 *  根据身份证号,返回对应的星座
 *  @param string $idcard    身份证号码
 */
function get_starsign($idcard){
    if(empty($idcard)) return null;
    $b = substr($idcard, 10, 4);
    $m = (int)substr($b, 0, 2);
    $d = (int)substr($b, 2);
    $val = '';
    if(($m == 1 && $d <= 21) || ($m == 2 && $d <= 19)){
        $val = '水瓶座';
    }else if (($m == 2 && $d > 20) || ($m == 3 && $d <= 20)){
        $val = '双鱼座';
    }else if (($m == 3 && $d > 20) || ($m == 4 && $d <= 20)){
        $val = '白羊座';
    }else if (($m == 4 && $d > 20) || ($m == 5 && $d <= 21)){
        $val = '金牛座';
    }else if (($m == 5 && $d > 21) || ($m == 6 && $d <= 21)){
        $val = '双子座';
    }else if (($m == 6 && $d > 21) || ($m == 7 && $d <= 22)){
        $val = '巨蟹座';
    }else if (($m == 7 && $d > 22) || ($m == 8 && $d <= 23)){
        $val = '狮子座';
    }else if (($m == 8 && $d > 23) || ($m == 9 && $d <= 23)){
        $val = '处女座';
    }else if (($m == 9 && $d > 23) || ($m == 10 && $d <= 23)){
        $val = '天秤座';
    }else if (($m == 10 && $d > 23) || ($m == 11 && $d <= 22)){
        $val = '天蝎座';
    }else if (($m == 11 && $d > 22) || ($m == 12 && $d <= 21)){
        $val = '射手座';
    }else if (($m == 12 && $d > 21) || ($m == 1 && $d <= 20)){
        $val = '魔羯座';
    }
    return $val;
}

echo '<br/>性别:'.get_sex('身份证号').'<br/>';
echo '<br/>生日:'.get_birthday('身份证号').'<br/>';
echo '<br/>年龄:'.get_age('身份证号').'<br/>';
echo '<br/>状态:'.isIdCard('身份证号').'<br/>';
echo '<br/>生肖:'.get_zodiac('身份证号').'<br/>';
echo '<br/>星座:'.get_starsign('身份证号').'<br/>';

 

标签:return,val,substr,idcard,获取,&&,get,PHP,性别
From: https://www.cnblogs.com/zhangyouwu/p/17511338.html

相关文章

  • jquery 获取父窗口的元素
    格式:$(selector,container)selector:是选择器的标志,比如id,class,名字等等container:是容器,比如window.parent.document例子:隐藏父窗口某个元素$("#login_div",window.parent.document).hide();......
  • 直播平台怎么搭建,Android获取文本的宽度和高度
    直播平台怎么搭建,Android获取文本的宽度和高度方法一:先绘制文本所在的矩形区域,再获取矩形区域的宽度   Rectrect=newRect();  mPaint.getTextBounds(text,0,text.length(),rect);  canvas.drawRect(rect,mPaint);  floattextWidth1=rect.width(); ......
  • PHP序列化与反序列化
    PHP反序列化漏洞序列化和反序列化本身是为了实现数据在网络上完整高效的传输,但是由于反序列化过程中,对象的魔术方法会自动调用,魔术方法本身调用了别的方法,最终呈现一种链式调用,直到执行任意的代码或者命令。序列化与反序列化seriallization序列化:将对象转化为便于传输的格式,......
  • PHP 建站推荐十个免费的CMS内容管理系统
    个人想建站?就在下面10个选吧。选好一个,安心做内容就行了。这是sun的体会。选择哪个CMS并不重要,除了对搜索引擎的亲好外,个人的使用操作习惯和对所选CMS系统的熟悉程度有很大关系。这里为需要建站但又徘徊的朋友介绍10个免费PHP+MySql平台下的CMS内容管理系统,可能会对你的选择有指导......
  • PHP语言对接抖音快手小红书视频/图片去水印API接口的案例
    这篇文章主要介绍了PHP语言对接抖音快手小红书视频/图片去水印API接口的案例,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。以下为PHP语言调用去水印接口的示例,展示GET请求方式的调用方式。示例代码中用到的Uid和Toke......
  • PHP代码加密实战过程 Swoole Loader
    帮一个客户处理一个小程序bug修复,前面不知道客户是直接购买一个倒闭的公司产品,还是破解版本的。其中一些核心工具类代码进行了加密,通过排查就找到了SwooleCompiler 今天演示下如何进行代码加密:大致步骤如下:注册 SwooleCompiler 账号地址:Swoole-Compiler-最佳PHP......
  • 代购源码,淘宝代购系统源码,代购程序,代购系统源码PHP前端源码参数说明
    代购业务场景:代购业务近年兴起的一种购物模式,是帮国外客户购买中国商品。主要通过外贸代购模式,把淘宝、天猫等电商平台的全站商品通过API接入到你的网站上,瞬间就可以架设一个有数亿产品的大型网上商城,而且可以把这些中文的商品全部自动翻译成各国语言,能让国外客户看懂,直接在网站......
  • jmeter beashell调用python3脚本并获取python输出值
    test3.py代码如下: beashell代码如下:importjava.io.BufferedReader;importjava.io.InputStreamReader;Stringcommand="cmd/cpythonD://个人//test3.py";Runtimert=Runtime.getRuntime();Processpr=rt.exec(command);pr.waitFor();BufferedRead......
  • .NET Core 获取小程序手机号并解析
    方法一:1.小程序提供微信用户授权后的code,用户手机号的加密数据和iv。2.使用code换取 sessionkey。3. 解密用户手机号的加密数据。参考代码///<summary>///获取openid,sessionkey///</summary>///<paramname="appID"></param......
  • 如何获取页面上某个元素的坐标
    打开浏览器的F12控制台,在console内输入下面代码functiongetPosition(node){//获取元素相对于其父元素的left值varleftvarleft=node.offsetLeft;vartop=node.offsetTop;//取得元素的offsetParentcurrent=node.offsetParent;//一直循环直到根元素while(current!=nu......