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+JS无限级可伸缩菜单详解(简单易懂)
Jan 02 PHP
微博短链接算法php版本实现代码
Sep 15 PHP
跟我学Laravel之路由
Oct 15 PHP
一个经典的PHP文件上传类分享
Nov 18 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
PHP SplObjectStorage使用实例
May 12 PHP
PHP计算加权平均数的方法
Jul 16 PHP
Symfony2开发之控制器用法实例分析
Feb 05 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
May 13 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
May 27 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
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
自动跳转中英文页面
2006/10/09 PHP
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
PHP5.2下chunk_split()函数整数溢出漏洞 分析
2007/06/06 PHP
PHP连接access数据库
2015/03/27 PHP
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
2016/02/21 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
layui点击按钮页面会自动刷新的解决方案
2019/10/25 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
利用python发送和接收邮件
2016/09/27 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
解决pycharm无法识别本地site-packages的问题
2018/10/13 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
Python中sorted()排序与字母大小写的问题
2020/01/14 Python
PyQT5 实现快捷键复制表格数据的方法示例
2020/06/19 Python
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
会计实习生自我鉴定
2013/12/12 职场文书
初一科学教学反思
2014/01/27 职场文书
阿德的梦教学反思
2014/02/06 职场文书
网络编辑岗位职责范本
2014/02/10 职场文书
门店业绩提升方案
2014/06/08 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
幼儿教师辞职信
2015/02/27 职场文书