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操作excel文件 基于phpexcel
Jul 02 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
Aug 02 PHP
Apache中php.ini的设置方法
Feb 28 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
Jun 08 PHP
php操作mysqli(示例代码)
Oct 28 PHP
PHP获取中英混合字符串长度的方法
Jun 07 PHP
php使用unset()删除数组中某个单元(键)的方法
Feb 17 PHP
php给一组指定关键词添加span标签的方法
Mar 31 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 PHP
CI框架实现创建自定义类库的方法
Dec 25 PHP
PHP实现读取文件夹及批量重命名文件操作示例
Apr 15 PHP
laravel 使用auth编写登录的方法
Sep 30 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
php 调用远程url的六种方法小结
2009/11/02 PHP
PHP 文件编程综合案例-文件上传的实现
2013/07/03 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
一个javascript参数的小问题
2008/03/02 Javascript
用javascript获取textarea中的光标位置
2008/05/06 Javascript
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
2010/02/15 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
手动下载Chrome并解决puppeteer无法使用问题
2018/11/12 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
python类继承用法实例分析
2014/10/10 Python
Python反射用法实例简析
2017/12/22 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
使用python实现滑动验证码功能
2019/08/05 Python
python读取hdfs上的parquet文件方式
2020/06/06 Python
python使用列表的最佳方案
2020/08/12 Python
python判断元素是否存在的实例方法
2020/09/24 Python
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
韩国商务邀请函
2014/01/14 职场文书
安全标准化实施方案
2014/02/20 职场文书
简单租房协议书
2014/04/09 职场文书
大学生工作求职信
2014/06/23 职场文书
市场营销毕业求职信
2014/08/07 职场文书
小学德育工作总结2015
2015/05/12 职场文书
辩护词范文大全
2015/05/21 职场文书