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 判断常量,变量和函数是否存在
Apr 26 PHP
php生成txt文件标题及内容的方法
Jan 16 PHP
PHP处理JSON字符串key缺少双引号的解决方法
Sep 16 PHP
ThinkPHP表单自动验证实例
Oct 13 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
Oct 29 PHP
PHP操作MySQL事务实例
Nov 05 PHP
提高php编程效率技巧
Aug 13 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
May 16 PHP
PHP中使用foreach()遍历二维数组的简单实例
Jun 13 PHP
php实现的http请求封装示例
Nov 08 PHP
php下的原生ajax请求用法实例分析
Feb 28 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
php统计数组元素个数的方法
2015/07/02 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
jquery下checked取值问题的解决方法
2012/08/09 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
js 字符串转换成数字的三种方法
2013/03/23 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
浅谈Koa服务限流方法实践
2017/10/23 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
vue 页面跳转的实现方式
2021/01/12 Vue.js
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
Python类成员继承重写的实现
2020/09/16 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
中华在我心中演讲稿
2014/09/13 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
2014年采购工作总结
2014/11/20 职场文书
师德师风事迹材料
2014/12/20 职场文书
财务总监岗位职责
2015/02/03 职场文书
2015年药房工作总结
2015/04/25 职场文书
运动会100米广播稿
2015/08/19 职场文书
如何判断pytorch是否支持GPU加速
2021/06/01 Python
SQL Server远程连接的设置步骤(图文)
2022/03/23 SQL Server