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 相关文章推荐
BBS(php &amp; mysql)完整版(五)
Oct 09 PHP
PHP+MYSQL 出现乱码的解决方法
Aug 08 PHP
PHP url 加密解密函数代码
Aug 26 PHP
探讨php define()函数及defined()函数使用详解
Jun 09 PHP
基于php中使用excel的简单介绍
Aug 02 PHP
PHP中spl_autoload_register()和__autoload()区别分析
May 10 PHP
PHP实现过滤各种HTML标签
May 17 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
Sep 14 PHP
PHP简单获取及判断提交来源的方法
Apr 22 PHP
一段实用的php验证码函数
May 19 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
Jun 22 PHP
详解PHP中的8个魔术常量
Jul 06 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 图片加水印与上传图片加水印php类
2010/05/12 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
PHP微信支付实例解析
2016/07/22 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
详解vue-admin和后端(flask)分离结合的例子
2018/02/12 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
2019/01/08 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
Python 字符串定义
2009/09/25 Python
python中二维阵列的变换实例
2014/10/09 Python
python字典基本操作实例分析
2015/07/11 Python
Python三级菜单的实例
2017/09/13 Python
在numpy矩阵中令小于0的元素改为0的实例
2019/01/26 Python
python实现图片上添加图片
2019/11/26 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
秋季运动会表扬稿
2014/01/16 职场文书
网络工程师职业规划
2014/02/10 职场文书
学前班评语大全
2014/05/04 职场文书
健康教育评估方案
2014/05/25 职场文书
初中班级口号
2014/06/09 职场文书
离婚协议书范本2014
2014/10/27 职场文书
接待员岗位职责范本
2015/04/15 职场文书
终止劳动合同通知书
2015/04/16 职场文书