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 相关文章推荐
Mysql的常用命令
Oct 09 PHP
php公用函数列表[正则]
Feb 22 PHP
php 大数据量及海量数据处理算法总结
May 07 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
Jun 29 PHP
PHP使用array_fill定义多维数组的方法
Mar 18 PHP
php判断一个数组是否为有序的方法
Mar 27 PHP
CodeIgniter与PHP5.6的兼容问题
Jul 16 PHP
Java中final关键字详解
Aug 10 PHP
php简单实现多语言切换的方法
May 09 PHP
php 如何获取文件的后缀名
Jun 05 PHP
PHP使用SMTP邮件服务器发送邮件示例
Aug 28 PHP
在 Laravel 中动态隐藏 API 字段的方法
Oct 25 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中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
新手学习PHP的一些基础知识分享
2011/07/27 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
理解Javascript_03_javascript全局观
2010/10/11 Javascript
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
python处理csv数据的方法
2015/03/11 Python
python daemon守护进程实现
2016/08/27 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
zookeeper python接口实例详解
2018/01/18 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
Python中Numpy mat的使用详解
2019/05/24 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
全球精选男装和家居用品:Article
2020/04/13 全球购物
Servlet的生命周期
2013/08/25 面试题
自动化专业职业生涯规划书范文
2014/01/16 职场文书
军训自我鉴定200字
2014/02/13 职场文书
爱耳日活动总结
2014/04/30 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
图书馆标语
2014/06/19 职场文书
军人离婚协议书样本
2014/10/21 职场文书
酒店工程部主管岗位职责
2015/04/16 职场文书
高一地理教学工作总结
2015/08/12 职场文书
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技
Redis基本数据类型String常用操作命令
2022/06/01 Redis
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS