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代码优化及php相关问题总结
Oct 09 PHP
一个没有MYSQL数据库支持的简易留言本的编写
Oct 09 PHP
PHP5 面向对象程序设计
Feb 13 PHP
PHP自动识别字符集并完成转码详解
Aug 02 PHP
PHP 输出URL的快捷方式示例代码
Sep 22 PHP
PHP+memcache实现消息队列案例分享
May 21 PHP
PHP资源管理框架Assetic简介
Jun 12 PHP
php中的mongodb select常用操作代码示例
Sep 06 PHP
php与Mysql的一些简单的操作
Feb 26 PHP
PHP实现指定字段的多维数组排序函数分享
Mar 09 PHP
php实现的数字验证码及数字运算验证码
Jul 30 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
Sep 04 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
如何将数据从文本导入到mysql
2006/10/09 PHP
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
php while循环控制的简单实例
2016/05/30 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
详解VSCode配置启动Vue项目
2019/05/14 Javascript
原生JS实现列表内容自动向上滚动效果
2019/05/22 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
2020/09/02 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
Python爬虫中urllib库的进阶学习
2018/01/05 Python
python验证码识别实例代码
2018/02/03 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
Python imutils 填充图片周边为黑色的实现
2020/01/19 Python
python怎么提高计算速度
2020/06/11 Python
使用keras实现非线性回归(两种加激活函数的方式)
2020/07/05 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
美国健康和保健平台:healtop
2020/07/02 全球购物
土木工程专业自荐信
2013/10/04 职场文书
大学专科生推荐信范文
2013/11/23 职场文书
医生见习报告范文
2014/11/03 职场文书
党校个人总结
2015/03/04 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS