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 相关文章推荐
php后台程序与Javascript的两种交互方式
Oct 25 PHP
php中使用接口实现工厂设计模式的代码
Jun 17 PHP
如何设置mysql允许外网访问
Jun 04 PHP
深入php常用函数的使用汇总
Jun 08 PHP
destoon实现首页显示供应、企业、资讯条数的方法
Jul 15 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
thinkphp实现图片上传功能
Jan 13 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
May 16 PHP
PHP标准类(stdclass)用法示例
Sep 28 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 PHP
YII框架批量插入数据的方法
Mar 18 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
Mar 07 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
第七节 类的静态成员 [7]
2006/10/09 PHP
PHP导入Excel到MySQL的方法
2011/04/23 PHP
PHP中使用gettext来支持多语言的方法
2011/05/02 PHP
php中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
Thinkphp中Create方法深入探究
2014/06/16 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jquery实现简单的banner轮播效果【实例】
2016/03/30 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
复制粘贴功能的Python程序
2008/04/04 Python
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
python实现车牌识别的示例代码
2019/08/05 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
Python configparser模块应用过程解析
2020/08/14 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
小学生环保演讲稿
2014/04/25 职场文书
2014年财务科工作总结
2014/11/11 职场文书
旷课检讨书范文
2015/01/27 职场文书
个人党性锻炼总结
2015/03/05 职场文书
家长通知书家长意见
2015/06/03 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server