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语法(3)
Oct 09 PHP
Adodb的十个实例(清晰版)
Dec 31 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 PHP
PHP自动选择 连接本地还是远程数据库
Dec 02 PHP
PHP操作数组的一些函数整理介绍
Jul 17 PHP
解析phpstorm + xdebug 远程断点调试
Jun 20 PHP
windows7下安装php的imagick和imagemagick扩展教程
Jul 04 PHP
PHP中数据库单例模式的实现代码分享
Aug 21 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
Apr 03 PHP
6个超实用的PHP代码片段
Aug 10 PHP
PHP编程中的__clone()方法使用详解
Nov 27 PHP
php + ajax 实现的写入数据库操作简单示例
May 16 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使用curl访问https示例分享
2014/01/17 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
图片格式的JavaScript和CSS速查手册
2007/08/20 Javascript
JavaScript入门教程(7) History历史对象
2009/01/31 Javascript
SWFObject 2.1以上版本语法介绍
2010/07/10 Javascript
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
vue中进行微博分享的实例讲解
2019/10/14 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
vue3.0实现插件封装
2020/12/14 Vue.js
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
python的三目运算符和not in运算符使用示例
2014/03/03 Python
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
python切片及sys.argv[]用法详解
2018/05/25 Python
Python爬取成语接龙类网站
2018/10/19 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
Series和DataFrame使用简单入门
2019/11/13 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
英国团购网站:Groupon英国
2017/11/28 全球购物
美国名牌手表折扣网站:Jomashop
2020/05/22 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
怎样声明子类
2013/07/02 面试题
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
司考复习计划
2015/01/19 职场文书
学校教学工作总结2015
2015/05/19 职场文书
Java输出Hello World完美过程解析
2021/06/13 Java/Android
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python