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 相关文章推荐
phpmyadmin 常用选项设置详解版
Mar 07 PHP
Apache 配置详解(最好的APACHE配置教程)
Jul 04 PHP
PHP开发者常犯的10个MySQL错误更正剖析
Jan 30 PHP
smarty模板引擎之分配数据类型
Mar 30 PHP
PHP之密码加密的几种方式
Jul 29 PHP
PHP调试的强悍利器之PHPDBG
Feb 22 PHP
全面解读PHP的Yii框架中的日志功能
Mar 17 PHP
PHP入门教程之图像处理技巧分析
Sep 11 PHP
PHP有序表查找之二分查找(折半查找)算法示例
Feb 09 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 PHP
PHP如何解决微信文章图片防盗链
Dec 09 PHP
PHP 裁剪图片
Mar 09 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脚本数据库功能详解(上)
2006/10/09 PHP
PHP操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
PHP对象相关知识总结
2017/04/09 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
仅IE支持clearAttributes/mergeAttributes方法使用介绍
2012/05/04 Javascript
javascript中数组的多种定义方法和常用函数简介
2014/05/09 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
2017/01/21 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
vue中typescript装饰器的使用方法超实用教程
2019/06/17 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
原生js实现3D轮播图
2020/03/21 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
[01:38]DOTA2 2015国际邀请赛中国区预选赛 Showopen
2015/06/01 DOTA
python中的代码编码格式转换问题
2015/06/10 Python
python利用Guetzli批量压缩图片
2017/03/23 Python
Python Flask-web表单使用详解
2017/11/18 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
pyqt5实现登录界面的模板
2020/05/30 Python
Django框架orM与自定义SQL语句混合事务控制操作
2019/06/27 Python
python初步实现word2vec操作
2020/06/09 Python
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
幼儿园开学家长寄语
2014/01/19 职场文书
市场营销求职信范文
2014/02/21 职场文书
工作经历证明书范文
2014/11/02 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书