PHP 身份验证方面的函数


Posted in PHP onOctober 11, 2009
<?php 
// 计算身份证校验码,根据国家标准GB 11643-1999 
function idcard_verify_number($idcard_base){ 
if (strlen($idcard_base) != 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($idcard_base); $i++){ 
$checksum += substr($idcard_base, $i, 1) * $factor[$i]; 
} 
$mod = $checksum % 11; 
$verify_number = $verify_number_list[$mod]; 
return $verify_number; 
} 
// 将15位身份证升级到18位 
function idcard_15to18($idcard){ 
if (strlen($idcard) != 15){ 
return false; 
}else{ 
// 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码 
if (array_search(substr($idcard, 12, 3), array('996', '997', '998', '999')) !== false){ 
$idcard = substr($idcard, 0, 6) . '18'. substr($idcard, 6, 9); 
}else{ 
$idcard = substr($idcard, 0, 6) . '19'. substr($idcard, 6, 9); 
} 
} 
$idcard = $idcard . idcard_verify_number($idcard); 
return $idcard; 
} 
// 18位身份证校验码有效性检查 
function idcard_checksum18($idcard){ 
if (strlen($idcard) != 18){ return false; } 
$idcard_base = substr($idcard, 0, 17); 
if (idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))){ 
return false; 
}else{ 
return true; 
} 
} 
?>

其中的$idcard_base是指身份证中的本位码,本位码是18位身份证里才有的,也就是18位身份证的前17位,最后一位称为校验码
一般在使用的时候不用直接调用idcard_verify_number(),平时的应用大多是使用后两个函数
这些函数都没有关心身份证字符串的格式问题,在调用前自行进行格式检查
PHP 相关文章推荐
php出现Cannot modify header information问题的解决方法大全
Apr 09 PHP
PHP中用正则表达式清除字符串的空白
Jan 17 PHP
php中批量修改文件后缀名的函数代码
Oct 23 PHP
PHP5.4中json_encode中文转码的变化小结
Jan 30 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
Jun 09 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
php注册和登录界面的实现案例(推荐)
Oct 24 PHP
laravel创建类似ThinPHP中functions.php的全局函数
Nov 26 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 PHP
PHP连接MySQL数据库三种实现方法
Dec 10 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
Oct 11 #PHP
关于页面优化和伪静态
Oct 11 #PHP
PHP iconv 函数转gb2312的bug解决方法
Oct 11 #PHP
Ha0k 0.3 PHP 网页木马修改版
Oct 11 #PHP
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 #PHP
PHP 日期时间函数的高级应用技巧
Oct 10 #PHP
PHP 日期加减的类,很不错
Oct 10 #PHP
You might like
德生S2000电路分析
2021/03/02 无线电
PHP调用三种数据库的方法(3)
2006/10/09 PHP
php smarty模版引擎中的缓存应用
2009/12/02 PHP
php判断终端是手机还是电脑访问网站的思路及代码
2013/04/24 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
javascript数组的使用
2013/03/28 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
讲解Python中的递归函数
2015/04/27 Python
浅谈Python的文件类型
2016/05/30 Python
高质量Python代码编写的5个优化技巧
2017/11/16 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
python的pip安装以及使用教程
2018/09/18 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
Python常用模块sys,os,time,random功能与用法实例分析
2020/01/07 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
35款精致的 CSS3 和 HTML5 网页模板 推荐
2012/08/03 HTML / CSS
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
如何执行一个shell程序
2012/11/23 面试题
技校毕业生自荐信范文
2014/03/07 职场文书
环保建议书400字
2014/05/14 职场文书
五一口号
2014/06/19 职场文书
小学亲子活动总结
2014/07/01 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
初中班干部工作总结
2015/08/10 职场文书