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循环输出数据库内容的代码
May 24 PHP
PHP 开源AJAX框架14种
Aug 24 PHP
php设计模式 Proxy (代理模式)
Jun 26 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
Mar 20 PHP
php分页思路以及在ZF中的使用
May 30 PHP
php 调试利器debug_print_backtrace()
Jul 23 PHP
PHP运行环境配置与开发环境的配置(图文教程)
Jun 04 PHP
PHP常用技巧汇总
Mar 04 PHP
浅谈Laravel中的一个后期静态绑定
Aug 11 PHP
ThinkPHP5 的简单搭建和使用详解
Nov 15 PHP
CI框架实现创建自定义类库的方法
Dec 25 PHP
YII框架关联查询操作示例
Apr 29 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
基于文本的留言簿
2006/10/09 PHP
php define的第二个参数使用方法
2013/11/04 PHP
php的sso单点登录实现方法
2015/01/08 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
PHP删除数组中指定下标的元素方法
2018/02/03 PHP
Prototype RegExp对象 学习
2009/07/19 Javascript
Javascript 二维数组
2009/11/26 Javascript
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
获取body标签的两种方法
2011/10/13 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
Python实现Linux下守护进程的编写方法
2014/08/22 Python
python中map()与zip()操作方法
2016/02/27 Python
简单实现python收发邮件功能
2018/01/05 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
python requests证书问题解决
2019/09/05 Python
python图像处理模块Pillow的学习详解
2019/10/09 Python
python操作gitlab API过程解析
2019/12/27 Python
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
美国Max仓库:Max Warehouse
2020/05/31 全球购物
优秀毕业生求职信范文
2014/01/02 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
中式婚礼主持词
2014/03/13 职场文书
简单租房协议书
2014/04/09 职场文书
关爱老人标语
2014/06/21 职场文书
庆七一活动总结
2014/08/27 职场文书
大学生简短的自我评价
2014/09/12 职场文书
企业版Windows 11有哪些新功能? Win11适用于企业的功能介绍
2021/11/21 数码科技
mysqldump进行数据备份详解
2022/07/15 MySQL