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网站提速三大“软”招
Oct 09 PHP
一个从别的网站抓取信息的例子(域名查询)
Oct 09 PHP
可以在线执行PHP代码包装修正版
Mar 15 PHP
PHP引用符&amp;的用法详细解析
Aug 22 PHP
ThinkPHP路由详解
Jul 27 PHP
php实现简易聊天室应用代码
Sep 23 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
Mar 17 PHP
php 判断IP为有效IP地址的方法
Jan 28 PHP
php微信公众号开发之音乐信息
Oct 20 PHP
PHP实现的用户注册表单验证功能简单示例
Feb 25 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
Aug 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
PHP的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
jquery 3D球状导航的文章分类
2010/07/06 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
在myeclipse中如何加入jquery代码提示功能
2014/06/03 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
2016/05/30 Javascript
JS基于递归实现倒计时效果的方法
2016/11/26 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
[01:48]帕吉至宝加入游戏,遗迹战场现“千劫神屠”
2018/04/07 DOTA
[01:04]不如跳舞!DOTA2新英雄玛尔斯的欢乐日常
2019/03/11 DOTA
pycharm安装图文教程
2017/05/02 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
Python3实现的判断回文链表算法示例
2019/03/08 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
利用python画出AUC曲线的实例
2020/02/28 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
python 串行执行和并行执行实例
2020/04/30 Python
python主要用于哪些方向
2020/07/05 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
关于逃课的检讨书
2014/01/23 职场文书
Java版 单机五子棋
2022/05/04 Java/Android