zoukankan      html  css  js  c++  java
  • 【转】PHP实现验证码

    转自http://www.jb51.net/article/40341.htm

    新建一个captcha.php:

    //验证码类
    class Captcha {
     private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子
     private $code;//验证码
     private $codelen = 4;//验证码长度
     private $width = 130;//宽度
     private $height = 50;//高度
     private $img;//图形资源句柄
     private $font;//指定的字体
     private $fontsize = 20;//指定字体大小
     private $fontcolor;//指定字体颜色
     //构造方法初始化
     public function __construct() {
      $this->font = dirname(__FILE__).'/font/elephant.ttf';//注意字体路径要写对,否则显示不了图片
     }
     //生成随机码
     private function createCode() {
      $_len = strlen($this->charset)-1;
      for ($i=0;$i<$this->codelen;$i++) {
       $this->code .= $this->charset[mt_rand(0,$_len)];
      }
     }
     //生成背景
     private function createBg() {
      $this->img = imagecreatetruecolor($this->width, $this->height);
      $color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
      imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);
     }
     //生成文字
     private function createFont() {
      $_x = $this->width / $this->codelen;
      for ($i=0;$i<$this->codelen;$i++) {
       $this->fontcolor = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
       imagettftext($this->img,$this->fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->height / 1.4,$this->fontcolor,$this->font,$this->code[$i]);
      }
     }
     //生成线条、雪花
     private function createLine() {
      //线条
      for ($i=0;$i<6;$i++) {
       $color = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
       imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);
      }
      //雪花
      for ($i=0;$i<100;$i++) {
       $color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
       imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);
      }
     }
     //输出
     private function outPut() {
      header('Content-type:image/png');
      imagepng($this->img);
      imagedestroy($this->img);
     }
     //对外生成
     public function doimg() {
      $this->createBg();
      $this->createCode();
      $this->createLine();
      $this->createFont();
      $this->outPut();
     }
     //获取验证码
     public function getCode() {
      return strtolower($this->code);
     }
    }

    接着就是静态页的代码了:index.html

    <img id="captcha_img" border='1' src='./captcha.php style="100px; height:30px" />

    下载font字体到指定位置

    类中的代码为
    $this->font = dirname(__FILE__).'/font/elephant.ttf';
  • 相关阅读:
    最长公共子序列和最长公共连续子序列 andrew的日志 网易博客
    Best Computer Science Interview Books JiansNet
    分享:Mitmproxy 0.9 发布,支持 SSL 的 HTTP 代理
    创业环境差,被迫“走西口”:一位台湾码农的心路历程
    STLSupport GDB Wiki
    utils C/C++的常用工具类
    题目36 ACM在线评测系统
    DRAMA QUEEN_洪晃在ilook的BLOG
    Codeblocks调试STL——gdb with python support Wanglikai91 博客园
    python urlencode 编码
  • 原文地址:https://www.cnblogs.com/mangoVic/p/8143618.html
Copyright © 2011-2022 走看看