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 相关文章推荐
计算2000年01月01日起到指定日的天数
Oct 09 PHP
一些关于PHP的知识
Nov 17 PHP
php 执行系统命令的方法
Jul 07 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
Apr 18 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
PHP 循环删除无限分类子节点的实现代码
Jun 21 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
PHP+jQuery+Ajax实现用户登录与退出
Apr 27 PHP
php简单实现屏蔽指定ip段用户的访问
Apr 29 PHP
YII框架页面缓存操作示例
Apr 29 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
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
2013/05/19 Javascript
使用apply方法实现javascript中的对象继承
2013/12/16 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
yepnope.js使用详解及示例分享
2014/06/23 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
vue中SPA单页面应用程序详解
2017/11/07 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
[01:06]欢迎来到上海,TI9
2018/08/26 DOTA
pyttsx3实现中文文字转语音的方法
2018/12/24 Python
Python multiprocessing多进程原理与应用示例
2019/02/28 Python
把django中admin后台界面的英文修改为中文显示的方法
2019/07/26 Python
PyCharm第一次安装及使用教程
2020/01/08 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
Python实现寻找回文数字过程解析
2020/06/09 Python
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
最新结婚典礼主持词
2014/03/14 职场文书
施工协议书范本
2014/04/22 职场文书
2014年会策划方案
2014/05/11 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
2014年学生会干事工作总结
2014/11/07 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
初中数学教学随笔
2015/08/15 职场文书
单位病假条范文
2015/08/17 职场文书
小区物业管理2015年度工作总结
2015/10/22 职场文书
七年级作文之环保作文
2019/10/17 职场文书