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&amp;&amp;mysql)三
Oct 09 PHP
JS 网站性能优化笔记
May 24 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
Jun 21 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 PHP
Laravel框架学习笔记(一)环境搭建
Oct 15 PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 PHP
php上传文件并存储到mysql数据库的方法
Mar 16 PHP
php递归实现无限分类的方法
Jul 28 PHP
php防止网站被攻击的应急代码
Oct 21 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 PHP
PHP中关于php.ini参数优化详解
Feb 28 PHP
Laravel的加密解密与哈希实例讲解
Mar 24 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
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
分享10段PHP常用代码
2015/11/11 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
限制文本字节数js代码
2007/03/06 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
深入分析原生JavaScript事件
2014/12/29 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
Jquery操作Ajax方法小结
2015/11/29 Javascript
jQuery实现内容定时切换效果完整实例
2016/04/06 Javascript
vue.js将unix时间戳转换为自定义时间格式
2017/01/03 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
详解JS中的快速排序与冒泡
2017/01/10 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
python基础教程之常用运算符
2014/08/29 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
python的常见矩阵运算(小结)
2019/08/07 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
2019/11/07 Python
python入门之基础语法学习笔记
2020/02/08 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
Python基于Faker假数据构造库
2020/11/30 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
初婚未育证明
2014/01/15 职场文书
一体化教学实施方案
2014/05/10 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
出生证明范本
2015/06/15 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
element多个表单校验的实现
2021/05/27 Javascript
Java实现简易的分词器功能
2021/06/15 Java/Android
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技
带你了解Java中的ForkJoin
2022/04/28 Java/Android