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 相关文章推荐
PHP中在数据库中保存Checkbox数据(1)
Oct 09 PHP
PHP生成带有雪花背景的验证码
Sep 28 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
Nov 10 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
Nov 12 PHP
php实现随机显示图片方法汇总
May 21 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
Aug 08 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
Feb 04 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
Jul 21 PHP
Laravel框架查询构造器 CURD操作示例
Sep 04 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作为网站开发语言的原因分享
2012/01/03 PHP
php比较两个绝对时间的大小
2014/01/31 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
js中的触发事件对象event.srcElement与event.target详解
2017/03/15 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
python网络爬虫采集联想词示例
2014/02/11 Python
在Python的Django框架中显示对象子集的方法
2015/07/21 Python
Python存取XML的常见方法实例分析
2017/03/21 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
CentOS7安装Python3的教程详解
2019/04/10 Python
Python的条件锁与事件共享详解
2019/09/12 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
python 双循环遍历list 变量判断代码
2020/05/04 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
DHC美国官网:日本通信销售第一的化妆品品牌
2017/11/12 全球购物
几道数据库的概念性面试题
2014/05/30 面试题
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
中文专业毕业生自荐书范文
2014/01/04 职场文书
项目合作计划书
2014/01/09 职场文书
小学运动会入场式解说词
2014/02/18 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
《没有任何借口》读后感:完美的执行能力
2020/01/07 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS