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 相关文章推荐
一个程序下载的管理程序(三)
Oct 09 PHP
php date与gmdate的获取日期的区别
Feb 08 PHP
通俗易懂的php防注入代码
Apr 07 PHP
PHP的变量总结 新手推荐
Apr 18 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
Sep 16 PHP
ThinkPHP模板替换与系统常量及应用实例教程
Aug 22 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
Sep 27 PHP
php中动态修改ini配置
Oct 14 PHP
WordPress中用于获取文章作者与分类信息的方法整理
Dec 17 PHP
php实现的一段简单概率相关代码
May 30 PHP
PHP获取当前文件的父目录方法汇总
Jul 21 PHP
PHP number_format函数原理及实例解析
Jul 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
一个ftp类(ini.php)
2006/10/09 PHP
PHP 检查扩展库或函数是否可用的代码
2010/04/06 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
PHP使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
时间戳转换为时间 年月日时间的JS函数
2013/08/19 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
js多个物体运动功能实例分析
2016/12/20 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
微信小程序如何调用json数据接口并解析
2019/06/29 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
Python3 操作符重载方法示例
2017/11/23 Python
如何用python整理附件
2018/05/13 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
2020/02/13 Python
Django User 模块之 AbstractUser 扩展详解
2020/03/11 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
Nike比利时官网:Nike.com (BE)
2019/02/07 全球购物
教育专业个人求职信
2013/12/02 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
2015年教研组工作总结
2015/05/04 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书
Windows server 2012 NTP时间同步的实现
2022/06/25 Servers