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 header Content-Type类型小结
Jul 03 PHP
php array_intersect比array_diff快(附详细的使用说明)
Jul 03 PHP
PHP定时执行计划任务的多种方法小结
Dec 19 PHP
php随机输出名人名言的代码
Oct 07 PHP
PHP实现读取一个1G的文件大小
Aug 24 PHP
PHP的PSR规范中文版
Sep 28 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
Oct 08 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
Oct 14 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
Oct 14 PHP
php如何把表单内容提交到数据库
Jul 08 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 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水印
2007/03/16 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
JQuery for与each性能比较分析
2013/05/14 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
使用jquery实现放大镜效果
2014/09/02 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
jQuery删除节点用法示例(remove方法)
2016/09/08 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
JavaScript中的遍历详解(多种遍历)
2017/04/07 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
js实现车辆管理系统
2020/08/26 Javascript
[02:42]DOTA2英雄基础教程 杰奇洛
2013/12/23 DOTA
Python进行数据科学工作的简单入门教程
2015/04/01 Python
python实现求最长回文子串长度
2018/01/22 Python
pycham查看程序执行的时间方法
2018/11/29 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
python集合的新增元素方法整理
2020/12/07 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
html5简介及新增功能介绍
2020/05/18 HTML / CSS
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
优秀毕业生的求职信
2014/07/21 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
世界卫生日宣传活动总结
2015/02/09 职场文书
工商局个人工作总结
2015/03/03 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
详解Vue的options
2021/05/15 Vue.js
用Java实现简单计算器功能
2021/07/21 Java/Android