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中mysql模块部分功能的简单封装
Sep 30 PHP
php对大文件进行读取操作的实现代码
Jan 23 PHP
php+ajax实现图片文件上传功能实例
Jun 17 PHP
PHP源码分析之变量的存储过程分解
Jul 03 PHP
PHP 正则表达式常用函数
Aug 17 PHP
PHP模板引擎Smarty自定义变量调解器用法
Apr 11 PHP
php组合排序简单实现方法
Oct 15 PHP
PHP 获取指定地区的天气实例代码
Feb 08 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
Mar 19 PHP
浅谈关于PHP解决图片无损压缩的问题
Sep 01 PHP
Laravel推荐使用的十个辅助函数
May 10 PHP
thinkPHP5框架接口写法简单示例
Aug 05 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
mcrypt启用 加密以及解密过程详细解析
2013/08/07 PHP
提高Laravel应用性能方法详解
2019/06/24 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
复制本贴标题和地址的js代码
2008/07/01 Javascript
jquery遍历input取得input的name
2009/04/27 Javascript
15款优秀的jQuery导航菜单插件分享
2011/07/19 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
jquery实现Ctrl+Enter提交表单的方法
2015/07/21 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/15 Javascript
微信小程序商城项目之购物数量加减(3)
2017/04/17 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
python使用PyFetion来发送短信的例子
2014/04/22 Python
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
python3.5绘制随机漫步图
2018/08/27 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
使用python实现离散时间傅里叶变换的方法
2019/09/02 Python
python元组的概念知识点
2019/11/19 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
2020/03/30 Python
python matlab库简单用法讲解
2020/12/31 Python
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
健康状况证明模板
2014/10/23 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
初中作文评语集锦
2014/12/25 职场文书
公司承诺书格式范文
2015/04/28 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
Windows server 2016服务器基本设置
2022/08/14 Servers