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中日期加减法运算实现代码
Dec 08 PHP
探讨:如何编写PHP扩展
Jun 13 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
php实现文件下载简单示例(代码实现文件下载)
Mar 10 PHP
Destoon模板制作简明教程
Jun 20 PHP
PHP删除指定目录中的所有目录及文件的方法
Feb 26 PHP
Laravel 5 框架入门(四)完结篇
Apr 09 PHP
PHP防止刷新重复提交页面的示例代码
Nov 11 PHP
Linux下编译redis和phpredis的方法
Apr 07 PHP
php数组函数array_walk用法示例
May 26 PHP
Yii2汉字转拼音类的实例代码
Apr 18 PHP
Yii框架小部件(Widgets)用法实例详解
May 15 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实现上传图片保存到数据库的方法
2015/02/11 PHP
php获得文件夹下所有文件的递归算法的简单实例
2016/11/01 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
jQuery select的操作实现代码
2009/05/06 Javascript
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
2014/04/04 Javascript
javascript与有限状态机详解
2014/05/08 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
极简的Python入门指引
2015/04/01 Python
Python中for循环和while循环的基本使用方法
2015/08/21 Python
Python实现定时任务
2017/02/08 Python
Python中作用域的深入讲解
2018/12/10 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
python字符串格式化方式解析
2019/10/19 Python
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
大学生物业管理求职信
2013/10/24 职场文书
房屋公证委托书
2014/04/03 职场文书
团日活动总结书格式
2014/05/08 职场文书
档案工作汇报材料
2014/08/21 职场文书
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server
Python OpenCV之常用滤波器使用详解
2022/04/07 Python
nginx rewrite功能使用场景分析
2022/05/30 Servers