zoukankan      html  css  js  c++  java
  • 【转】验证码类

    经典的php验证码类,随笔记一下,以后用的上的时候方便查找。

    封装的captcha.class.php

     1 <?php 
     2 class captcha{
     3     private $width;//
     4     private $height;//
     5     private $codeNum;//数量
     6     private $code;//
     7     private $im;//
     8  
     9     function __construct($width=80, $height=20, $codeNum=4)
    10     {
    11         $this->width = $width;
    12         $this->height = $height;
    13         $this->codeNum = $codeNum;
    14     }
    15  
    16     function showImg()
    17     {
    18         //创建图片
    19         $this->createImg();
    20         //设置干扰元素
    21         $this->setDisturb();
    22         //设置验证码
    23         $this->setCaptcha();
    24         //输出图片
    25         $this->outputImg();
    26     }
    27  
    28     function getCaptcha()
    29     {
    30         return $this->code;
    31     }
    32  
    33     private function createImg()
    34     {
    35         $this->im = imagecreatetruecolor($this->width, $this->height);
    36         $bgColor = imagecolorallocate($this->im, 0, 0, 0);
    37         imagefill($this->im, 0, 0, $bgColor);
    38     }
    39  
    40     private function setDisturb()
    41     {
    42         $area = ($this->width * $this->height) / 20;
    43         $disturbNum = ($area > 250) ? 250 : $area;
    44         //加入点干扰
    45         for ($i = 0; $i < $disturbNum; $i++) {
    46             $color = imagecolorallocate($this->im, rand(0, 255), rand(0, 255), rand(0, 255));
    47             imagesetpixel($this->im, rand(1, $this->width - 2), rand(1, $this->height - 2), $color);
    48         }
    49         //加入弧线
    50         for ($i = 0; $i <= 5; $i++) {
    51             $color = imagecolorallocate($this->im, rand(128, 255), rand(125, 255), rand(100, 255));
    52             imagearc($this->im, rand(0, $this->width), rand(0, $this->height), rand(30, 300), rand(20, 200), 50, 30, $color);
    53         }
    54     }
    55  
    56     private function createCode()
    57     {
    58         $str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ";
    59  
    60         for ($i = 0; $i < $this->codeNum; $i++) {
    61             $this->code .= $str{rand(0, strlen($str) - 1)};
    62         }
    63     }
    64  
    65     private function setCaptcha()
    66     {
    67         $this->createCode();
    68  
    69         for ($i = 0; $i < $this->codeNum; $i++) {
    70             $color = imagecolorallocate($this->im, rand(50, 250), rand(100, 250), rand(128, 250));
    71             $size = rand(floor($this->height / 5), floor($this->height / 3));
    72             $x = floor($this->width / $this->codeNum) * $i + 5;
    73             $y = rand(0, $this->height - 20);
    74             imagechar($this->im, $size, $x, $y, $this->code{$i}, $color);
    75         }
    76     }
    77  
    78     private function outputImg()
    79     {
    80         if (imagetypes() & IMG_JPG) {
    81             header('Content-type:image/jpeg');
    82             imagejpeg($this->im);
    83         } elseif (imagetypes() & IMG_GIF) {
    84             header('Content-type: image/gif');
    85             imagegif($this->im);
    86         } elseif (imagetype() & IMG_PNG) {
    87             header('Content-type: image/png');
    88             imagepng($this->im);
    89         } else {
    90             die("Don't support image type!");
    91         }
    92     }
    93 }
    94     
    95 ?>

    demo.php

    1 <?php 
    2     session_start();
    3     require('captcha.class.php');
    4     $captcha = new captcha(80,20,4);
    5     $code = $captcha->getCaptcha();
    6     $_SESSION['code'] = $code;
    7     $captcha->showImg();
    8 ?>
  • 相关阅读:
    Delphi 实现任务栏多窗口图标显示
    Win7如何部署定制的Quicklaunch图标
    Delphi中关于菜单的几个技巧
    delphi里为程序任务栏右键菜单添加自定义菜单
    DELPHI 让子窗体显示在任务栏上
    C# Newtonsoft.Json 读取文件,返回json字符串
    C# Newtonsoft.Json 读取文件,返回json字符串
    在使用layui Table时,死活显示不了数据,无效的 JSON 基元 解决办法
    newtonsoft返回json去掉字符串
    ASP.NET MVC AJAX 请求中加入 antiforgerytoken 解决“所需的防伪表单字段“__RequestVerificationToken”不存在”问题
  • 原文地址:https://www.cnblogs.com/mashangfei/p/4884878.html
Copyright © 2011-2022 走看看