php验证身份证号码正确性的函数


Posted in PHP onJuly 20, 2016

身份证验证最简单的就是判断长度了,当然这种非常简单破了如果要更规则一点我们需要对身份证号码进行一些按生成规则验证了,下面整理了一些函数我们来看看。

例子,今天分享一个php验证身份证号码是否正确函数.

/********************php验证身份证号码是否正确函数*********************/ 
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; 
      } //phpfensi.com 
      else 
      { 
        return TRUE; 
      } 
    } 
  } 
 
}

调用身份证验证函数
 $idc=is_idcard("身份证号码");
if($idc){echo "正确";}else{echo "错误";}

例子二:

function validation_filter_id_card($id_card){ 
 if(strlen($id_card)==18){ 
 return idcard_checksum18($id_card); 
 }elseif((strlen($id_card)==15)){ 
 $id_card=idcard_15to18($id_card); 
 return idcard_checksum18($id_card); 
 }else{ 
 return false; 
 } 
} 
// 计算身份证校验码,根据国家标准GB 11643-1999 
function idcard_verify_number($idcard_base){ 
 if(strlen($idcard_base)!=17){ 
 return false; 
 } 
 //加权因子 
 $factor=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2); 
 //校验码对应值 
 $verify_number_list=array('1','0','X','9','8','7','6','5','4','3','2'); 
 $checksum=0; 
 for($i=0;$i<strlen($idcard_base);$i++){ 
 $checksum += substr($idcard_base,$i,1) * $factor[$i]; 
 } 
 $mod=$checksum % 11; 
 $verify_number=$verify_number_list[$mod]; 
 return $verify_number; 
} 
// 将15位身份证升级到18位 
function idcard_15to18($idcard){ 
 if(strlen($idcard)!=15){ 
 return false; 
 }else{ 
 // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码 
 if(array_search(substr($idcard,12,3),array('996','997','998','999')) !== false){ 
  $idcard=substr($idcard,0,6).'18'.substr($idcard,6,9); 
 }else{ 
  $idcard=substr($idcard,0,6).'19'.substr($idcard,6,9); 
 } 
 } 
 $idcard=$idcard.idcard_verify_number($idcard); 
 return $idcard; 
} 
// 18位身份证校验码有效性检查 
function idcard_checksum18($idcard){ 
 if(strlen($idcard)!=18){ 
 return false; 
 } 
 $idcard_base=substr($idcard,0,17); 
 if(idcard_verify_number($idcard_base)!=strtoupper(substr($idcard,17,1))){ 
 return false; 
 }else{ 
 return true; 
 } 
}

调用方法如:validation_filter_id_card('身份证号码');

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
实用函数4
Nov 08 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
Mar 20 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
Nov 24 PHP
基于PHP技术开发客服工单系统
Jan 06 PHP
Linux环境下php实现给网站截图的方法
May 03 PHP
深入理解PHP之源码目录结构与功能说明
Jun 01 PHP
PHP中CheckBox多选框上传失败的代码写法
Feb 13 PHP
一个实用的php验证码类
Jul 06 PHP
PHP chunk_split()函数讲解
Feb 12 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 PHP
PHP加密解密类实例代码
Jul 20 #PHP
php图片添加水印例子
Jul 20 #PHP
支付宝服务窗API接口开发php版本
Jul 20 #PHP
PHP二维数组矩形转置实例
Jul 20 #PHP
php实现登录tplink WR882N获取IP和重启的方法
Jul 20 #PHP
PHP的AES加密算法完整实例
Jul 20 #PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 #PHP
You might like
重置版战役片段
2020/04/09 魔兽争霸
PHP 9 大缓存技术总结
2015/09/17 PHP
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
2013/03/18 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
2015/03/05 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题
2015/08/27 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
微信小程序引入Vant组件库过程解析
2019/08/06 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
Python中的rjust()方法使用详解
2015/05/19 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
Django自定义分页与bootstrap分页结合
2021/02/22 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
python中的不可变数据类型与可变数据类型详解
2018/09/16 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
Python使用scipy模块实现一维卷积运算示例
2019/09/05 Python
Python使用type动态创建类操作示例
2020/02/29 Python
详解Anaconda 的安装教程
2020/09/23 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
马来西亚网上购物:Youbeli
2018/03/30 全球购物
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
一些关于MySql加速和优化的面试题
2014/01/30 面试题
办公室保洁员岗位职责
2013/12/02 职场文书
大学生职业生涯规划书模板
2014/01/18 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
硕士生找工作求职信
2014/07/05 职场文书
党员干部反四风对照检查材料思想汇报
2014/09/14 职场文书
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书
2015年感恩节活动总结
2015/03/24 职场文书
Pandas 数据编码的十种方法
2022/04/20 Python