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 相关文章推荐
VML绘图板②脚本--VMLgraph.js、XMLtool.js
Oct 09 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
May 31 PHP
利用php绘制饼状图的实现代码
Jun 07 PHP
php实现的一个很好用HTML解析器类可用于采集数据
Sep 23 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
PHP中exec函数和shell_exec函数的区别
Aug 20 PHP
laravel安装zend opcache加速器教程
Mar 02 PHP
php实现图片等比例缩放代码
Jul 23 PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 PHP
利用laravel+ajax实现文件上传功能方法示例
Aug 13 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
PHP抽象类基本用法示例
Dec 28 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 JSON格式数据交互实例代码详解
2011/01/13 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
php伪静态验证码不显示的解决方案
2019/09/26 PHP
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
2017/04/07 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
利用pandas读取中文数据集的方法
2018/07/25 Python
Python列表(List)知识点总结
2019/02/18 Python
Pytorch的mean和std调查实例
2020/01/02 Python
django ajax发送post请求的两种方法
2020/01/05 Python
使用Python发现隐藏的wifi
2020/03/04 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
2020/07/30 Python
python Tornado框架的使用示例
2020/10/19 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
Burberry英国官网:英国标志性奢侈品牌
2017/03/29 全球购物
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
大学迎新晚会主持词
2014/03/24 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
公务员群众路线专题民主生活会发言材料
2014/09/17 职场文书
领导参观欢迎词
2015/01/26 职场文书
护理专业自我评价
2015/03/11 职场文书
自主招生英文自荐信
2015/03/25 职场文书
检讨书格式
2015/05/07 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
nginx location优先级的深入讲解
2021/03/31 Servers
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
Spring Cloud Gateway去掉url前缀
2021/07/15 Java/Android