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手册及PHP编程标准
Dec 17 PHP
php简单提示框alert封装函数
Aug 08 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
Jan 19 PHP
PHP笔记之:基于面向对象设计的详解
May 14 PHP
php实现邮件发送并带有附件
Jan 24 PHP
php判断访问IP的方法
Jun 19 PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 PHP
PHP基于SMTP协议实现邮件发送实例代码
Apr 27 PHP
php使用curl下载指定大小的文件实例代码
Sep 30 PHP
php 中phar包的使用教程详解
Oct 26 PHP
laravel框架模型和数据库基础操作实例详解
Jan 25 PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 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
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
2014/06/12 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
javascript 日期时间 转换的方法
2013/02/21 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
深入剖析JavaScript中的函数currying柯里化
2016/04/29 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
javascript self对象使用详解
2016/10/18 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
Python实现选择排序
2017/06/04 Python
python pandas库中DataFrame对行和列的操作实例讲解
2018/06/09 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
俄罗斯汽车零件和配件在线商店:CarvilleShop
2019/11/29 全球购物
农业大学毕业生的个人自我评价
2013/10/11 职场文书
办公室年终个人自我评价
2013/10/28 职场文书
售后服务经理岗位职责范本
2014/02/22 职场文书
《海底世界》教学反思
2014/04/16 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
Redis唯一ID生成器的实现
2022/07/07 Redis
Redis Lua脚本实现ip限流示例
2022/07/15 Redis