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学习教程之第2天
Jun 15 PHP
php下HTTP Response中的Chunked编码实现方法
Nov 19 PHP
php 论坛采集程序 模拟登陆,抓取页面 实现代码
Jul 09 PHP
php 静态变量的初始化
Nov 15 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
Aug 14 PHP
分享一个超好用的php header下载函数
Jan 31 PHP
PHP实现根据设备类型自动跳转相应页面的方法
Jul 24 PHP
Web程序工作原理详解
Dec 25 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
Jul 07 PHP
php加密之discuz内容经典加密方式实例详解
Feb 04 PHP
cakephp常见知识点汇总
Feb 24 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 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
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
php FLEA中二叉树数组的遍历输出
2012/09/26 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
php模拟登陆的实现方法分析
2015/01/09 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
2017/03/16 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
javascript实现文字无缝滚动效果
2017/08/26 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
JS+Canvas绘制动态时钟效果
2017/11/10 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
[03:17]2014DOTA2 国际邀请赛中国区预选赛 四强专访
2014/05/23 DOTA
Python获取电脑硬件信息及状态的实现方法
2014/08/29 Python
开源Web应用框架Django图文教程
2017/03/09 Python
python指定写入文件时的编码格式方法
2018/06/07 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
运动会邀请函范文
2014/01/31 职场文书
军训感想500字
2014/02/20 职场文书
介绍信的格式
2015/01/30 职场文书
护理专业自荐信范文
2015/03/06 职场文书
主持稿开场白
2015/06/01 职场文书
外出考察学习心得体会
2016/01/18 职场文书
Opencv中cv2.floodFill算法的使用
2021/06/18 Python
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python