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 Server的两个日期处理函数
Oct 09 PHP
最省空间的计数器
Oct 09 PHP
在任意字符集下正常显示网页的方法二(续)
Apr 01 PHP
php session安全问题分析
Jun 24 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
Dec 29 PHP
PHP中Array相关函数简介
Jul 03 PHP
php读取XML的常见方法实例总结
Apr 25 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
PHP+Ajax实现的博客文章添加类别功能示例
Mar 29 PHP
PHP输出Excel PHPExcel的方法
Jul 26 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 PHP
详解php反序列化
Jun 10 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
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
php面向对象值单例模式
2016/05/03 PHP
AJAX的使用方法详解
2017/04/29 PHP
关于Yii中模型场景的一些简单介绍
2019/09/22 PHP
使用原生js写的一个简单slider
2014/04/29 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
Angular中$compile源码分析
2016/01/28 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
vue从使用到源码实现教程详解
2016/09/19 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
js实现盒子拖拽动画效果
2020/08/09 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
2020/09/08 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
详解Python Socket网络编程
2016/01/05 Python
Python获取文件所在目录和文件名的方法
2017/01/12 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
Python绘制热力图示例
2019/09/27 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
给老婆的检讨书1000字
2015/01/01 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python