• 验证码的类及使用


    <?php

    session_start();

    ini_set('display_errors', 'Off');

    class CCheckCodeFile

    {

           //验证码位数 www.2cto.com

           var $mCheckCodeNum  = 4;

           //产生的验证码

           var $mCheckCode   = '';

           //验证码的图片

           var $mCheckImage  = '';

           //干扰像素

           var $mDisturbColor  = '';

           //验证码的图片宽度

           var $mCheckImageWidth = '80';

           //验证码的图片宽度

           var $mCheckImageHeight  = '20';

           //输出头

           function OutFileHeader()

           {

                  header ("Content-type: image/png");

           }

           //产生验证码

           function CreateCheckCode()

           {

                  //$this->mCheckCode = strtoupper(substr(md5(rand()),0,$this->mCheckCodeNum));

                  $this->mCheckCode = strtoupper(substr(rand(0,9999999999),0,$this->mCheckCodeNum));

                  session_cache_expire(60);

                  session_start();

                  $_SESSION["code_str"] = $this->mCheckCode;

                  return $this->mCheckCode;

           }

           //产生验证码图片

           function CreateImage()

           {

                  $this->mCheckImage = @imagecreate ($this->mCheckImageWidth,$this->mCheckImageHeight);

                  imagecolorallocate ($this->mCheckImage, 255, 255, 255);

                  return $this->mCheckImage;

           }

           //设置图片的干扰像素

           function SetDisturbColor()

           {

                  for ($i=0;$i<=128;$i++)

                  {

                         $this->mDisturbColor = imagecolorallocate ($this->mCheckImage, rand(0,255), rand(0,255), rand(0,255));

                         imagesetpixel($this->mCheckImage,rand(1,100),rand(1,100),$this->mDisturbColor);

                  }

           }

           //设置验证码图片的大小宽高

           function SetCheckImageWH($width,$height)

           {

                  if($width==''||$height=='')return false;

                  $this->mCheckImageWidth  = $width;

                  $this->mCheckImageHeight = $height;

                  return true;

           }

           //在验证码图片上逐个画上验证码

           function WriteCheckCodeToImage()

           {

                  for ($i=0;$i<=$this->mCheckCodeNum;$i++)

                  {

                         $bg_color = imagecolorallocate ($this->mCheckImage, rand(0,255), rand(0,255), rand(0,255));

                         $x = floor($this->mCheckImageWidth/$this->mCheckCodeNum)*$i;

                         $y = rand(0,$this->mCheckImageHeight-15);

                         imagechar ($this->mCheckImage, 5, $x, $y, $this->mCheckCode[$i], $bg_color);

                  }

           }

           //输出验证码图片

           function OutCheckImage()

           {

                  $this ->OutFileHeader();

                  $this ->CreateCheckCode();

                  $this ->CreateImage();

                  $this ->SetDisturbColor();

                  $this ->WriteCheckCodeToImage();

                  imagepng($this->mCheckImage);

                  imagedestroy($this->mCheckImage);

           }

    }

    $c_check_code_image = new CCheckCodeFile();

    //$c_check_code_image ->SetCheckImageWH(100,50);//设置显示验证码图片的尺寸

    $c_check_code_image->OutCheckImage();

    ?>

    使用方法:

    <tr>

          <td align="center" valign="middle">验证码</td>

          <td align="center" valign="middle"><input name="number" type="text" style="80px;">

          <img src="code.php" id="yzm" onclick="this.src='code.php?abc='+Math.random()" alt="图片看不清?点击重新得到验证码" style="cursor:hand;" />

    </td>

        </tr>

    验证是否正确

    session_start();

      if($_POST["number"] == $_SESSION["code_str"]){

      //      echo("验证码正确");

      }else{

            echo "

                         <script>

                                var s=10;

                                function ok()

                                {

                                s--;

                                document.getElementById('tips').innerHTML=s;

                                if(s==0)

                                {

                                clearTimeout(t);

                                history.go(-1);

                                }

                                }

                                var t=setInterval('ok()',1000);

                         </script>

    " . "请输入的验证码,请重新输入<span id='tips'></span>秒之后,将为您跳转到<a href="javascript:history.go(-1)">上一页</a>";

      }

  • 相关阅读:
    WinForm窗体传值 总结
    SQLServer遍历数据库所有表及统计表数据总数
    GridView合并行代码
    日期转换成字符串
    flex与js交互浅析
    九,query task
    八,graphics
    十,Find and Identity
    转移批令
    db dw dd 和 dup
  • 原文地址:https://www.cnblogs.com/S-Ping/p/4244191.html
Copyright © 2020-2023  润新知