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实现多服务器session共享之NFS共享的方法
Mar 16 PHP
php daodb插入、更新与删除数据
Mar 19 PHP
snoopy 强大的PHP采集类使用实例代码
Dec 09 PHP
从php核心代码分析require和include的区别
Jan 02 PHP
php关于array_multisort多维数组排序的使用说明
Jan 04 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
Jun 12 PHP
php实现遍历文件夹的方法汇总
Mar 02 PHP
php解析mht文件转换成html的实例
Mar 13 PHP
PC端微信扫码支付成功之后自动跳转php版代码
Jul 07 PHP
PHP实现15位身份证号转18位的方法分析
Oct 16 PHP
laravel 实现根据字段不同值做不同查询
Oct 23 PHP
PHP网页缓存技术优点及代码实例
Jul 29 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 实现类似js中alert() 提示框
2015/03/18 PHP
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
js判断60秒以及倒计时示例代码
2014/01/24 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
2014/10/16 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
理解JavaScript原型链
2016/10/25 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
Python日志模块logging简介
2015/04/13 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
2020/06/03 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
python 下载m3u8视频的示例代码
2020/11/11 Python
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
建筑专业自荐信范文
2014/01/05 职场文书
档案接收函
2014/01/13 职场文书
采购部部长岗位职责
2014/02/06 职场文书
铁路工务反思材料
2014/02/07 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
导游词之岳阳楼
2019/09/25 职场文书