php 验证码程序

 更新时间:2016年11月25日 16:58  点击:1460
这是一款简单实用的php验证码生成程序了,主要是利用了php gd库来生成图形验证码,并且保存到session中,生成的代码是利用rand随机生成的。
 代码如下 复制代码

session_start();
$im=imagecreatetruecolor(100,30);
//分配颜色
$bg=imagecolorallocate($im,0,0,0);
$textcolor=imagecolorallocate($im,255,255,255);
//在图片上划线
for($i=0;$i<3;$i++){

$te1 = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imageline($im,0,rand(0,15),100,rand(0,15),$te1);
}
//在图片上打印200个点
for($i=0;$i<200;$i++){

 imagesetpixel($im,rand()%100,rand()%30,$te1);
}
for($i=0;$i<4;$i++){
 //dechex()把十进制转换成十六进制
 $rand.= dechex(rand(1,15));
}
$_session[check_pic]=$rand;
imagestring($im,5,rand(3,70),rand(3,15),$rand,$textcolor);
header("content-type:image/jpeg");
imagejpeg($im);

/*
生成验证的作用是防止用户乱注册了,这是一等的验证程序
*/

这是一款经典实用的生成小图的php代码,有专业素语来讲就是php 生成缩略图代码哦。

# 显示图形及连接

 function showdir ($adirectory, $i)

{
  global $browsedir;

  $start = $i;

# 更改 $maxcols 及 $maximages 可改变每一页显示的小图的行数与列数。

  $maxcols = 2;
  $maximages = 6;
  $maximages = $i + ($maximages - 3);

# 更改 $imagemaxwidth 及 $imagemaxheight 可改变显示小图的宽度与高度。

  $imagemaxwidth = 100;
  $imagemaxheight = 100;
   
# 计算高度与宽度的比例。

  $imagemaxratio =  $imagemaxwidth / $imagemaxheight;
   
  $ndirectory = sizeof ($adirectory);
  echo (table_start);
  for ($i; $i<=$maximages;)
  {
     echo (row_start);
     for ($icols=1; $icols<=$maxcols; $icols++)
     {
       echo (col_start);
       $imagefilename = $adirectory[++$i];
       if (strlen($imagefilename)>0)
       {
         $imagepath = $browsedir."/".$imagefilename;
         $imagesize = getimagesize ($imagepath);
         if ($imagesize)
         {
           $imagewidth = $imagesize[0];
           $imageheight = $imagesize[1];
           $imageratio = $imagewidth / $imageheight;
           if ($imageratio > $imagemaxratio)
           {
              $imageoutputwidth = $imagemaxwidth;
              $imageoutputheight = ceil ($imagemaxwidth/$imagewidth*$imageheight);
           }
           else if ($imageratio < $imagemaxratio)
           {
              $imageoutputheight = $imagemaxheight;
              $imageoutputwidth = ceil ($imagemaxheight/$imageheight*$imagewidth);
           } else
           {
              $imageoutputwidth = $imagemaxwidth;
              $imageoutputheight = $imagemaxheight;
           }

# 显示图形

           echo (a_start.$imagepath.a_close);
           echo (img_start.$imagepath.img_width.$imageoutputwidth.img_height.$imageoutputheight.img_end);
           echo (line_break.$adirectory[$i]);
           echo (a_end);
         }
         echo (col_end);
       }
     }
     echo (row_end);
  }
  echo (table_end);
pagemenu ($browsedir, $ndirectory, $start);

}

function pagemenu ($browsedir, $ndirectory, $pg) {

echo "<br><center><font face="verdana, arial, helvetica, sans-serif" size="1" color="#000033">page:";

$pg_num = 1;

for ($img_num = 0; $img_num <= $ndirectory;) {

    if ($pg == $img_num) {
    echo "<span class="menulink_1"><a href="thumb.php?browsedir=$browsedir&start=$img_num"> *$pg_num</a> <span>";
    } else {
    echo "<span class="menulink_2"><a href="thumb.php?browsedir=$browsedir&start=$img_num"> $pg_num</a> <span>";
    }

# 建立其他页次的连接, 每页显示四张图, 故页数 $pg_num 每加 1 , $img_num 就加 4 。

    $pg_num = $pg_num + 1;
    $img_num = $img_num + 4;

}

echo "</font> ";

}

function dirtoarray ($browsedir, $extensions)
{

  $nextensions = sizeof ($extensions);
  $idirectory = 0;
  $directory = dir($browsedir);
   
  while ($entry = $directory->read())
  {
      for ($i=1; $i<=$nextensions; $i++)
      {
         $compare = stristr ($entry, $extensions[$i]);
         if (strlen($compare) == strlen($extensions[$i]))
         {
            $adirectory[++$idirectory] = $entry;
            break;
         }
      }
  }
  $directory->close();
  return $adirectory;
}

#主程序

#变量 $browsedir 为图形文件放置的位置。

$browsedir="./images";

# 允许浏览的图形文件扩展名, 放置於数组中, 可自行增加。

$extensions[1] = "jpeg";
$extensions[2] = "jpg";
$extensions[3] = "gif";
$extensions[4] = "png"; 
showdir (dirtoarray ($browsedir, $extensions), $start);

define ("line_break", "<br>");
define ("table_start", "<table width=600> ");
define ("table_end", "</table> ");
define ("row_start", "  <tr> ");
define ("row_end", "  </tr> ");
define ("col_start", "   <td align=center>       ");
define ("col_end", "    </td> ");
define ("img_start", "<img src=");
define ("img_end", ">");
define ("img_width", " width=");
define ("img_height", " height=");
define ("a_start", '<a href="');
define ("a_close", '">');
define ("a_end", "</a>");
?>

这款php图片生成教程是一款从生成一个简单的图像到生成复杂的图形的php教程,下面就来看简单到复杂有12个生成图像实例。

1 生成一个简单图像。
2 设定图像的颜色。
3 在图像上绘制直线。
4 在图像上显示文字。
5 在图像中显示中文字符。
6 打开已存在的图片。
7 获取图片的相关属性。
8 函数getimagesize()的用法。
9 为上传图片添加水印效果。
10 生成已有图片的缩略图。
11 使用函数imagecopyresampled()。
12 生成带有底纹的数字验证码图片的php程序。

*/

//1 生成一个简单图像。

 代码如下 复制代码

$width = 200;
$height =200;

$img =  imagecreatetruecolor($width,$height) or die("不支持gd图像处理");
imagepng($img);
imagedestroy($img);

//2 设定图像的颜色。

 代码如下 复制代码

$width = 200;
$height =200;

$img =  imagecreatetruecolor($width,$height) or die("不支持gd图像处理");

$bg_color = imagecolorallocate($img, 255, 0, 0);
imagefill($img, 0, 0, $bg_color);

imagepng($img);
imagedestroy($img);

//3 在图像上绘制直线。

 代码如下 复制代码

$width = 200;
$height =300;

$img =  imagecreatetruecolor($width,$height) or die("不支持gd图像处理");

$line_color = imagecolorallocate($img, 255, 255, 255);
imageline($img,0,40,200,40,$line_color);
imageline($img,0,260,200,260,$line_color);

imagepng($img);
imagedestroy($img);

//4 在图像上显示文字。

 代码如下 复制代码

$width = 200;
$height =300;

$img =  imagecreatetruecolor($width,$height) or die("不支持gd图像处理");
$line_color = imagecolorallocate($img, 255, 255, 255);

imageline($img, 0, 40, 200, 40, $line_color);
imageline($img, 0, 260, 200, 260, $line_color);
imagestring($img, 5, 0, 60, "it's time to learn php!", $line_color);

imagepng($img);
imagedestroy($img);

//5 在图像中显示中文字符。

 代码如下 复制代码

$width = 200;
$height =300;

$img =  imagecreatetruecolor($width,$height) or die("不支持gd图像处理");
$line_color = imagecolorallocate($img, 255, 255, 255);
$font_type ="c://windows//fonts//simli.ttf";    //获取truetype字体,采用隶书字体

//“西游记”3个字16进制字符
$cn_char1 = chr(0xe8).chr(0xa5).chr(0xbf);
$cn_char2 = chr(0xe6).chr(0xb8).chr(0xb8);
$cn_char3 = chr(0xe8).chr(0xae).chr(0xb0);

//“吴承恩著”4个字16进制字符
$cn_str = chr(0xe5).chr(0x90).chr(0xb4).chr(0xe6).chr(0x89).chr(0xbf).chr(0xe6).chr(0x81).chr(0xa9);
$cn_str .= " ".chr(0xe8).chr(0x91).chr(0x97);

imageline($img, 0, 40, 200, 40, $line_color);
imageline($img, 0, 260, 200, 260, $line_color);

//竖排显示“西游记”3字
imagettftext($img, 30, 0, 10, 80, $line_color, $font_type,$cn_char1);
imagettftext($img, 30, 0, 10, 120, $line_color, $font_type,$cn_char2);
imagettftext($img, 30, 0, 10, 160, $line_color, $font_type,$cn_char3);

//横排显示“吴承恩著”4字
imagettftext($img, 15, 0, 90, 254, $line_color, $font_type,$cn_str);

imagepng($img);
imagedestroy($img);

//6 打开已存在的图片。
$img=imagecreatefromjpeg("tower.jpg");

imagejpeg($img);
imagedestroy($img);

//7 获取图片的相关属性。
$img=imagecreatefromjpeg("tower.jpg");

$x = imagesx($img);
$y = imagesy($img);
echo "图片tower.jpg的宽为:<b>$x</b> pixels";
echo "<br/>";
echo "<br/>";
echo "图片tower.jpg的高为:<b>$y</b> pixels";

//8 函数getimagesize()的用法。
$img_info=getimagesize("tower.jpg");

for($i=0; $i<4; ++$i)
{
    echo $img_info[$i];
    echo "<br/>";
}

?>

这是一款利用php自带的功能把指定的大图生成我们指定大小的缩略图代码哦,使用方便简单,只要把设置下面四个参数就可以生成自己想的大小的缩略图哦。

 代码如下 复制代码

function bigtosmallimg($file,$path,$w=120,$h=90)
{
 $img=$path.$file;
 $imgarr=getimagesize($img);
 $sw=$imgarr[0];//原图宽
 $sh=$imgarr[1];//原图高
 $stype=$imgarr[2];
 //按比例缩放
 if($sw/$sh>$w/$h){
  $mw=$w;
  $mh=(int)$sh*($w/$sw);
 }
 else{
  $mw=(int)$sw*($h/$sh);
  $mh=$h;
 }

 switch($stype){//根据上传好的图形文件类型新建一个用来生成缩略图的源文件。
   case 1:
    $srcf = imagecreatefromgif($img);
    break;
   case 2:
    $srcf = imagecreatefromjpeg($img);
    break;
   case 3:
    $srcf = imagecreatefrompng($img);
    break;
   default:
    showmsg('程序调用错误。');
    break;
 }

 $desf =imagecreatetruecolor($mw,$mh);

 imagecopyresampled($desf,$srcf,0,0,0,0,$mw,$mh,$sw,$sh);
 $sm_name=$path."s_".$file;
 switch($stype){
  case 1:
   imagegif($desf,$sm_name);
   break;
  case 2:
   imagejpeg($desf,$sm_name);
   break;
  case 3:
   imagepng($desf,$sm_name);
   break;
  default:
   showmsg('无法生成www.111cn.net' . $stype . '的缩略图。');
   break;
 }
 imagedestroy($desf);
 imagedestroy($srcf);

}

//此缩略图调用方法

 代码如下 复制代码

bigtosmallimg($file,$path,$w=120,$h=90);
/*

$file = 图片的路径
$path = 生成后保存的路径
$w =图片宽度
$h =图片高度
*/

以前写的验证码程序都是提供了源代码,但是没真的实的图形验证码生成到验证实例,这次我们一个完整的php 验证实例产生了。

有3个文件:
authcode.php-----验证码的生成php文件
authcode.html-----前台显示页面
dealauthcode.php-----ajax提交到的后台处理判断验证码是否正确的处理页面
*/
?>

前台调用验证码代码

 代码如下 复制代码

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.111cn.net/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>验证码ajax验证</title>
<style type="text/css教程">
        *{ font-size:12px;}
        a{ text-decoration:none;}
        a:hover{ text-decoration:underline; color:red;}
</style>
<script language="网页特效" src="http://code.jquery.com/jquery-1.4.2.min.网页特效"></script>
<script language="网页特效">
        $(document).ready(function(){
                /*----------------看不清楚,换张图片-----------*/
                $("#chang_authcode_btn").click(function(){
                        var authcode_url = "authcode.php?t="+math.random(0,1);
                        $("#authcode_img").attr('src',authcode_url);
                });               
                /*----------------检测验证码-----------*/       
                $("#authcode").bind({
                        'focusin':function(){
                                /**
                                 *得到焦点
                                 *我将img图片移除,若只改变src为'
                                 *'的话,在ie下会呈现出一个无图片的小图片,
                                 *所以我这里选择直接把img元素移除
                                 */
                                $(this).next('label').children('img').remove();
                                $(this).next('label').children('span').text('');
                        },               
                        'focusout':function(){
                                /**
                                 *失去焦点
                                 *这里要做的事情主要有下列几个:
                                 *(1)先用网页特效验证用户输入的验证是不是4位合法的字符,正则匹配
                                 *(2)如果正则匹配失败(不是合法的4位字符),在更新次验证码图片(也就是再触发一次"看不清楚"的a标签的点击事件)
                                 */
                                 var input_authcode = $(this).val();
                                 var authcode_regex = new regexp('^[a-z0-9]{4}','i');
                                 if(!authcode_regex.test(input_authcode)){//不是合法的4位字符串,显示错误信息给用户
                                        $(this).next('label').prepend("<img src='input_error.gif'/>");//加上错误图标
                                        $(this).next('label').children('span').text('输入的验证码格式错误!');//加上错误提示信息
                                        $("#chang_authcode_btn").trigger('click');//再次刷新图片
                                 }else{//ajax服务器验证,就是把用户的输入的验证码提交到服务器上的某个验证页面来处理!
                                         $.get('dealauthcode.php',{authcode:input_authcode},function(check_result){
                                                if(check_result=='mis_match'){//服务器验证没通过
                                                        $("#authcode").next('label').prepend("<img src='input_error.gif'/>");//加上错误图标
                                                        $("#authcode").next('label').children('span').text('验证码输入错误!');//加上错误提示信息
                                                        $("#chang_authcode_btn").trigger('click');//再次刷新图片
                                                }else{//服务器验证通过了
                                                        $("#authcode").next('label').prepend("<img src='input_ok.gif'/>");//加上正确图标
                                                        $("#authcode").next('label').children('span').text('验证码输入正确!');//加上正确提示信息       
                                                }                                                                                
                                         });
                                 }
                        }
                });               
        });
</script>
</head>
<body>
<div >
        <div><img id="authcode_img" src="authcode.php" /> <a id="chang_authcode_btn" style="cursor:pointer">看不清楚?换一张!</a></div>
        <div>验证码:<input id="authcode" type="text" size="20" /><label><span class="error_msg"></span></label></div>
</div>
</body>
</html>

dealauthcode.php-----ajax提交到的后台处理判断验证码是否正确的处理页面

 代码如下 复制代码
<?php
        session_start();
       $authcode = $_get['authcode'];
//这里的$_session['authcode']是在验证码authcode页面产生的
if(strtoupper($authcode)!= $_session['authcode']){   
echo 'mis_match';       
        }
?>
[!--infotagslink--]

相关文章

  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 微信小程序 页面传值详解

    这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
  • C#使用Process类调用外部exe程序

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • jQuery Real Person验证码插件防止表单自动提交

    本文介绍的jQuery插件有点特殊,防自动提交表单的验证工具,就是我们经常用到的验证码工具,先给大家看看效果。效果图如下: 使用说明 需要使用jQuery库文件和Real Person库文件 同时需要自定义验证码显示的CSS样式 使用实例...2015-11-08
  • uniapp微信小程序:key失效的解决方法

    这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • Django def clean()函数对表单中的数据进行验证操作

    这篇文章主要介绍了Django def clean()函数对表单中的数据进行验证操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-09
  • JS实现随机生成验证码

    这篇文章主要为大家详细介绍了JS实现随机生成验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-06
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文

    时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25
  • 微信小程序二维码生成工具 weapp-qrcode详解

    这篇文章主要介绍了微信小程序 二维码生成工具 weapp-qrcode详解,教大家如何在项目中引入weapp-qrcode.js文件,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下...2021-10-23
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • JavaScript实现密码框输入验证

    这篇文章主要为大家详细介绍了JavaScript实现密码框输入验证,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-01
  • 微信小程序自定义tabbar组件

    这篇文章主要为大家详细介绍了微信小程序自定义tabbar组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-14
  • 微信小程序 网络请求(GET请求)详解

    这篇文章主要介绍了微信小程序 网络请求(GET请求)详解的相关资料,需要的朋友可以参考下...2016-11-22
  • 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • Jquery插件实现点击获取验证码后60秒内禁止重新获取

    通过jquery.cookie.js插件可以快速实现“点击获取验证码后60秒内禁止重新获取(防刷新)”的功能效果图:先到官网(http://plugins.jquery.com/cookie/)下载cookie插件,放到相应文件夹,代码如下:复制代码 代码如下: <!DOCTYPE ht...2015-03-15
  • Nest.js 授权验证的方法示例

    这篇文章主要介绍了Nest.js 授权验证的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-22
  • el-table树形表格表单验证(列表生成序号)

    这篇文章主要介绍了el-table树形表格表单验证(列表生成序号),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-01