PHP编写登录验证码功能 附调用方法


Posted in PHP onMay 19, 2016

本文实例为大家分享了一个PHP写的登录验证码功能,供大家参考,具体内容如下

 ShowKey.php

<?php
session_start();
//设置COOKIE或Session
function esetcookie($name,$str,$life=0){
//本函数将字符串 str 全部变小写字符串使验证码输入不区分大小写----在提交表单进行session比较同样需要次函数转化
 $_SESSION[$name]=strtolower($str);
}

//获取随机字符 此函数区分字符大小写 如果不区分大小写可加入函数strtolower
function domake_password($len) 
{ 
  $chars = array( 
    /*"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", 
    "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", 
    "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", 
    "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", 
    "S", "T", "U", "V", "W", "X", "Y", "Z",*/ "0", "1", "2", 
    "3", "4", "5", "6", "7", "8", "9" 
  ); 
  $charsLen = count($chars) - 1; 
  shuffle($chars);// 将数组打乱
  $output = ""; 
  for ($i=0; $i<$len; $i++) 
  { 
    $output .= $chars[mt_rand(0, $charsLen)]; //获得一个数组元素
  } 
  return $output;
} 

//显示验证码
function ShowKey(){
 $key=domake_password(4);//获取随机值
 $set=esetcookie("checkkey",$key);//将随机值写入cookie或session
 //是否支持gd库
 if(function_exists("imagejpeg")) 
 {
  header ("Content-type: image/jpeg");
  $img=imagecreate(47,20);
  $blue=imagecolorallocate($img,102,102,102);
  $white=ImageColorAllocate($img,255,255,255);
  $black=ImageColorAllocate($img,71,71,71);
  imagefill($img,0,0,$blue);
  imagestring($img,5,6,3,$key,$white);
  for($i=0;$i<90;$i++) //加入干扰象素
  {
   imagesetpixel($img,rand()%70,rand()%30,$black);
  }
  imagejpeg($img);
  imagedestroy($img);
 }
 elseif (function_exists("imagepng"))
 {
  header ("Content-type: image/png");
  $img=imagecreate(47,20);
  $blue=imagecolorallocate($img,102,102,102);
  $white=ImageColorAllocate($img,255,255,255);
  $black=ImageColorAllocate($img,71,71,71);
  imagefill($img,0,0,$blue);
  imagestring($img,5,6,3,$key,$white);
  for($i=0;$i<90;$i++) //加入干扰象素
  {
   imagesetpixel($img,rand()%70,rand()%30,$black);
  }
  imagepng($img);
  imagedestroy($img);
 }
 elseif (function_exists("imagegif")) 
 {
  header("Content-type: image/gif");
  $img=imagecreate(47,20);
  $blue=imagecolorallocate($img,102,102,102);
  $white=ImageColorAllocate($img,255,255,255);
  $black=ImageColorAllocate($img,71,71,71);
  imagefill($img,0,0,$blue);
  imagestring($img,5,6,3,$key,$white);
  for($i=0;$i<90;$i++) //加入干扰象素
  {
   imagesetpixel($img,rand()%70,rand()%30,$black);
  }
  imagegif($img);
  imagedestroy($img);
 }
 elseif (function_exists("imagewbmp")) 
 {
  header ("Content-type: image/vnd.wap.wbmp");
  $img=imagecreate(47,20);
  $blue=imagecolorallocate($img,102,102,102);
  $white=ImageColorAllocate($img,255,255,255);
  $black=ImageColorAllocate($img,71,71,71);
  imagefill($img,0,0,$blue);
  imagestring($img,5,6,3,$key,$white);
  for($i=0;$i<90;$i++) //加入干扰象素
  {
   imagesetpixel($img,rand()%70,rand()%30,$black);
  }
  imagewbmp($img);
  imagedestroy($img);
 }
 else
 {
  //不支持验证码
  header("content-type:image/jpeg\r\n");
  header("Pragma:no-cache\r\n");
  header("Cache-Control:no-cache\r\n");
  header("Expires:0\r\n");
  $fp = fopen("data/vdcode.jpg","r"); 
 }
}
ShowKey();
?>

调用方法:

<img src="ShowKey.php" name="KeyImg" id="KeyImg"  onClick="KeyImg.src='ShowKey.php?'+Math.random()"> 

以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。

PHP 相关文章推荐
PHP 批量删除 sql语句
Jun 05 PHP
PHP常用的文件操作函数经典收藏
Apr 02 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
Jun 20 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
Mar 18 PHP
详解PHP的Yii框架中自带的前端资源包的使用
Mar 31 PHP
PHP实现的统计数据功能详解
Dec 06 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
Apr 01 PHP
PHP实现的策略模式简单示例
Aug 25 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
PHP PDOStatement::bindValue讲解
Jan 30 PHP
一段实用的php验证码函数
May 19 #PHP
thinkphp3.x中cookie方法的用法分析
May 19 #PHP
thinkphp3.x中display方法及show方法的用法实例
May 19 #PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
May 19 #PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
May 19 #PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 #PHP
php处理json格式数据经典案例总结
May 19 #PHP
You might like
一个用于mysql的数据库抽象层函数库
2006/10/09 PHP
php中通过smtp发邮件的类,测试通过
2007/01/22 PHP
简单的cookie计数器实现源码
2013/06/07 PHP
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
laravel 实现划分admin和home 模块分组
2019/10/15 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
js实现文本框宽度自适应文本宽度的方法
2015/08/13 Javascript
Bootstrap每天必学之标签与徽章
2015/11/27 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
小程序实现留言板
2018/11/02 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
思想政治教育专业个人求职信范文
2013/12/20 职场文书
运动会领导邀请函
2014/01/10 职场文书
奶茶专卖店创业计划书
2014/01/18 职场文书
优秀教师推荐材料
2014/12/16 职场文书
党小组鉴定意见
2015/06/02 职场文书
2016继续教育培训学习心得体会
2016/01/19 职场文书
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL
Android存储中最基本的文件存储方式
2022/04/30 Java/Android