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的ob_start();控制您的浏览器cache!
Nov 25 PHP
php读取javascript设置的cookies的代码
Apr 12 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
PHP实现根据浏览器跳转不同语言页面代码
Aug 02 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
Apr 01 PHP
PHP编写登录验证码功能 附调用方法
May 19 PHP
深入浅出讲解:php的socket通信原理
Dec 03 PHP
Thinkphp 中 distinct 的用法解析
Dec 14 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
PHP实现通过strace定位故障原因的方法
Apr 29 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
Apr 13 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旋转图片90度的方法
2013/11/07 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
python实现抽奖小程序
2020/04/15 Python
Python生成一个迭代器的实操方法
2019/06/18 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
C语言中break与continue的区别
2012/07/12 面试题
经典c++面试题四
2015/05/14 面试题
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
搬家公司的创业计划书
2014/01/01 职场文书
总结表彰大会主持词
2014/03/26 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
财政局党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
css position fixed 左右双定位的实现代码
2021/04/29 HTML / CSS