PHP 验证身份证是否合法的函数


Posted in PHP onFebruary 09, 2017

话不多说,请看代码:

function is_idcard( $id )
{
  $id = strtoupper($id);
  $regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/";
  $arr_split = array();
  if(!preg_match($regx, $id))
  {
    return FALSE;
  }
  if(15==strlen($id)) //检查15位
  {
    $regx = "/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/";
    @preg_match($regx, $id, $arr_split);
    //检查生日日期是否正确
    $dtm_birth = "19".$arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4];
    if(!strtotime($dtm_birth))
    {
      return FALSE;
    }
    else
    {
      return TRUE;
    }
  }
  else //检查18位
  {
    $regx = "/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/";
    @preg_match($regx, $id, $arr_split);
    $dtm_birth = $arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4];
    if(!strtotime($dtm_birth)) //检查生日日期是否正确
    {
      return FALSE;
    }
    else
    {
      //检验18位身份证的校验码是否正确。
      //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
      $arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
      $arr_ch = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
      $sign = 0;
      for ( $i = 0; $i < 17; $i++ )
      {
        $b = (int) $id{$i};
        $w = $arr_int[$i];
        $sign += $b * $w;
      }
      $n = $sign % 11;
      $val_num = $arr_ch[$n];
      if ($val_num != substr($id,17, 1))
      {
        return FALSE;
      }
      else
      {
        return TRUE;
      }
    }
  }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
mysql5详细安装教程
Jan 15 PHP
深入理解php的MySQL连接类
Jun 07 PHP
php用户注册页面利用js进行表单验证具体实例
Oct 17 PHP
PHP获取当前完整URL地址的函数
Dec 21 PHP
PHP使用CURL实现多线程抓取网页
Apr 30 PHP
详解PHP归并排序的实现
Oct 18 PHP
PHP实现的XML操作类【XML Library】
Dec 29 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
May 05 PHP
Yii框架批量插入数据扩展类的简单实现方法
May 23 PHP
微信企业转账之入口类分装php代码
Oct 01 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
Nov 22 PHP
Laravel服务容器绑定的几种方法总结
Jun 14 PHP
如何打开php的gd2库
Feb 09 #PHP
利用PHP访问带有密码的Redis方法示例
Feb 09 #PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 #PHP
使用php实现网站验证码功能【推荐】
Feb 09 #PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 #PHP
PHP设置Cookie的HTTPONLY属性方法
Feb 09 #PHP
PHP调试及性能分析工具Xdebug详解
Feb 09 #PHP
You might like
PHP form 表单传参明细研究
2009/07/17 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
2016/12/25 PHP
PHP连续签到功能实现方法详解
2019/12/04 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
[原创]用javascript实现检测指定目录是否存在的方法
2008/01/12 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
jQuery的3种请求方式$.post,$.get,$.getJSON
2014/03/28 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
Python 调用DLL操作抄表机
2009/01/12 Python
Python实现建立SSH连接的方法
2015/06/03 Python
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
Python面向对象进阶学习
2019/05/21 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
详解CSS3选择器:nth-child和:nth-of-type之间的差异
2017/09/18 HTML / CSS
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
学前教育专业毕业生自荐信
2013/10/03 职场文书
医院办公室主任职责
2013/12/29 职场文书
1亿有多大教学反思
2014/05/01 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书