php不用正则验证真假身份证


Posted in PHP onNovember 06, 2013

直接看代码吧,很简单的一个PHP类

<?php 

$IDCard = new IDCard(); 

var_dump($IDCard::isCard($_GET['card'])); 

  

/** 

 * 身份证处理类 

 */

class IDCard { 

  

    //检证身份证是否正确 

    public static function isCard($card) { 

        $card = self::to18Card($card); 

        if (strlen($card) != 18) { 

            return false; 

        } 

  

        $cardBase = substr($card, 0, 17); 

  

        return (self::getVerifyNum($cardBase) == strtoupper(substr($card, 17, 1))); 

    } 

  

  

    //格式化15位身份证号码为18位 

    public static function to18Card($card) { 

        $card = trim($card); 

  

        if (strlen($card) == 18) { 

            return $card; 

        } 

  

        if (strlen($card) != 15) { 

            return false; 

        } 

  

        // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码 

        if (array_search(substr($card, 12, 3), array('996', '997', '998', '999')) !== false) { 

            $card = substr($card, 0, 6) . '18' . substr($card, 6, 9); 

        } else { 

            $card = substr($card, 0, 6) . '19' . substr($card, 6, 9); 

        } 

        $card = $card . self::getVerifyNum($card); 

        return $card; 

    } 

  

    // 计算身份证校验码,根据国家标准gb 11643-1999 

    private static function getVerifyNum($cardBase) { 

        if (strlen($cardBase) != 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($cardBase); $i++) { 

            $checksum += substr($cardBase, $i, 1) * $factor[$i]; 

        } 

  

        $mod = $checksum % 11; 

        $verify_number = $verify_number_list[$mod]; 

  

        return $verify_number; 

    } 

} 

?>  

另外,关于身份证号验证本站还提供了身份证归属地查询工具如下:

PHP 相关文章推荐
解析thinkphp基本配置 convention.php
Jun 18 PHP
使用PHP导出Word文档的原理和实例
Oct 21 PHP
Nginx下配置codeigniter框架方法
Apr 07 PHP
如何用PHP来实现一个动态Web服务器
Jul 29 PHP
学习php设计模式 php实现建造者模式
Dec 07 PHP
WordPress中限制非管理员用户在文章后只能评论一次
Dec 31 PHP
PHP实现的进度条效果详解
May 03 PHP
微信支付开发交易通知实例
Jul 12 PHP
PHP转换文本框内容为HTML格式的方法
Jul 20 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
Nov 14 PHP
php利用嵌套数组拼接与解析json的方法
Feb 07 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
php 中文字符串首字母的获取函数分享
Nov 04 #PHP
PHP图片上传代码
Nov 04 #PHP
PHP CURL获取cookies模拟登录的方法
Nov 04 #PHP
php Session存储到Redis的方法
Nov 04 #PHP
在PHP中使用redis
Nov 04 #PHP
6种php上传图片重命名的方法实例
Nov 04 #PHP
php preg_replace替换实例讲解
Nov 04 #PHP
You might like
PHP提取中文首字母
2008/04/09 PHP
php 连接mysql连接被重置的解决方法
2011/02/15 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
Javascript 判断客户端浏览器类型代码
2010/03/01 Javascript
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
2016/11/07 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
Bootstrap table两种分页示例
2016/12/23 Javascript
VUE实现表单元素双向绑定(总结)
2017/08/08 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
Vue 嵌套路由使用总结(推荐)
2020/01/13 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
python字符串过滤性能比较5种方法
2017/06/22 Python
python 全局变量的import机制介绍
2017/09/07 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
2019/08/13 Python
python numpy 反转 reverse示例
2019/12/04 Python
Python用access判断文件是否被占用的实例方法
2020/12/17 Python
演讲主持词
2014/03/18 职场文书
租房协议书怎么写
2014/04/10 职场文书
庆七一活动总结
2014/08/27 职场文书
Go并发4种方法简明讲解
2022/04/06 Golang
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android