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编程开发“虚拟域名”系统
Oct 09 PHP
一个php导出oracle库的php代码
Apr 20 PHP
php压缩多个CSS为一个css的代码并缓存
Apr 21 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
Nov 07 PHP
php获取url参数方法总结
Nov 13 PHP
php判断输入是否是纯数字,英文,汉字的方法
Mar 05 PHP
php简单操作mysql数据库的类
Apr 16 PHP
PHP+ajax分页实例简析
Dec 07 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 PHP
PHP互换两个变量值的方法(不用第三变量)
Nov 14 PHP
Thinkphp实现站点静态化的方法详解
Mar 21 PHP
php实现微信企业转账功能
Oct 02 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中文字母数字验证码实现代码
2008/04/25 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
Vue keep-alive实践总结(推荐)
2017/08/31 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
vue 实现移动端键盘搜索事件监听
2019/11/06 Javascript
JavaScript闭包原理与用法学习笔记
2020/05/29 Javascript
python+opencv实现阈值分割
2018/12/26 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
详解Python下载图片并保存本地的两种方式
2019/05/15 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
django框架模板语言使用方法详解
2019/07/18 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
用python读取xlsx文件
2020/12/17 Python
法国在线药房:1001Pharmacies
2021/03/07 全球购物
车间班组长岗位职责
2013/11/13 职场文书
二手房买卖协议书
2014/04/10 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
办公室岗位职责
2015/02/04 职场文书
老公婚前保证书
2015/02/28 职场文书
七年级英语教学反思
2016/02/15 职场文书
详解如何用Python实现感知器算法
2021/06/18 Python
Python django中如何使用restful框架
2021/06/23 Python
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS
python中filter,map,reduce的作用
2022/06/10 Python