zoukankan      html  css  js  c++  java
  • PHP验证码代码

    <?php
    //// 验证码代码

    $code = new Code();
    $code->outImage();

    class Code {
    ///验证码个数
    protected $number;
    ///验证码类型
    protected $codeType;
    ///图形宽度
    protected $width;
    ///图形高度
    protected $height;
    ///图形资源
    protected $image;
    ///验证码字符串
    protected $code;

    public function __construct( $number=4, $codeType=2, $width=100, $height=50 ) {
    ///初始化自己的成员属性
    $this->number = $number;
    $this->codeType = $codeType;
    $this->width = $width;
    $this->height = $height;

    ////生成验证码函数
    $this->code = $this->createCode();

    }


    public function __destruct(){
    imagedestroy($this->image);
    }


    public function __get( $name ) {
    if ( $name == 'code' ) {
    return $this->code;
    }
    return false;
    }

    protected function createCode() {
    ///通过验证码类型生成不同的验证码
    switch ( $this->codeType ) {
    case 0: ///纯数字
    $code = $this->getNumberCode();
    break;
    case 1: ///纯字母
    $code = $this->getCharCode();
    break;
    case 2: ///数字和字母混合
    $code = $this->getNumCharCode();
    break;
    default:
    die( "不支持这种验证码类型" );
    }
    return $code;
    }

    protected function getNumberCode() {
    $str = join( '', range( 0, 9 ) );
    return substr( str_shuffle( $str ), 0, $this->number );
    }
    protected function getCharCode() {
    $str = join( '', range( 'a', 'z' ) );
    $str = $str . strtoupper( $str );
    return substr( str_shuffle( $str ), 0, $this->number );
    }

    protected function getNumCharCode() {
    $numStr = join( '', range( 0, 9 ) );
    $str = join( '', range( 'a', 'z' ) );
    $str = $numStr . $str . strtoupper( $str );
    return substr( str_shuffle( $str ), 0, $this->number );
    }


    protected function createImage(){
    $this->image=imagecreatetruecolor($this->width,$this->height);
    }

    protected function fillBack(){
    imagefill($this->image,0,0,$this->lightColor());
    }

    protected function lightColor(){
    return imagecolorallocate($this->image,mt_rand(130,255),mt_rand(130,255),mt_rand(130,255));
    }
    protected function darkColor(){
    return imagecolorallocate($this->image,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120));
    }
    protected function drawChar(){
    $width=ceil($this->width/$this->number);
    for($i=0;$i<$this->number;$i++){
    $x=mt_rand($i*$width+5,($i+1)*$width-10);
    $y=mt_rand(0,$this->height-15);

    imagechar($this->image,5,$x,$y,$this->code[$i],$this->darkColor());
    }
    }

    protected function drawDisturb(){
    for($i=0;$i<150;$i++){
    $x=mt_rand(0,$this->width);
    $y=mt_rand(0,$this->height);
    imagesetpixel($this->image,$x,$y,$this->lightColor());
    }
    }

    protected function show(){
    header('Content-Type:image/png');
    imagepng($this->image);
    }


    public function outImage(){
    ///创建画布
    $this->createImage();
    ///填充背景色
    $this->fillBack();
    ///将验证码字符串画到画布中
    $this->drawChar();
    ///添加干扰元素
    $this->drawDisturb();
    ///输出并且显示
    $this->show();

    }

    }

    ?>

  • 相关阅读:
    单例模式
    C++继承-重载-多态-虚函数
    c++仿函数 functor
    常用排序算法实现与效率比较
    树的中序非递归遍历
    二叉树递归遍历
    队列的顺序存储框架
    栈的链式存储框架
    栈的顺序存储构架
    函数指针和回调函数
  • 原文地址:https://www.cnblogs.com/summerGraden/p/11543856.html
Copyright © 2011-2022 走看看