zoukankan      html  css  js  c++  java
  • 自己写个验证码类

    <?php
    /**
     * captcha plugin
     */
    class Captcha
    {
        private    $session_name    = 'session_name',
                $width          = 0,
                $height         = 0;

        /**
         * Construct
         * @param   string  $folder
         * @param   integer $width
         * @param   integer $height
         */
        public function __construct( $session_name = 'captcha_word', $width = 145, $height = 20 )
        {
            $this->init( $session_name, $width, $height );
        }

        /**
         * init
         */
        public function init( $session_name, $width, $height )
        {
            $this->session_name = $session_name;
            $this->width        = $width;
            $this->height       = $height;
        }

        /**
         * check captcha
         * @param   string  $word
         * @return  bool
         */
        public function check( $captcha )
        {
            return isset( $_SESSION[$this->session_name] ) && $this->_encrypts(strtoupper( $captcha )) === $_SESSION[$this->session_name];
        }

        /**
         * make captcha image
         * @param   string  $word   验证码
         * @return  mix
         */
        public function generateImage( $word = NULL )
        {
            /*
             * make captcha word
             */
            $word = is_null( $word ) ? $this->generateWord() : $word;

            /*
             * captch word length
             */
            $letters = strlen( $word );

            /*
             * create image
             */
            $img    = imagecreatetruecolor ( $this->width, $this->height );

            // color
            $bg_color    = imagecolorallocate( $img , rand( 0, 128 ), rand( 0, 128 ), rand( 0, 128 ));
            $txt_color    = imagecolorallocate( $img , rand( 128, 256 ), rand( 128, 256 ), rand( 128, 256 ));

            // background
            imagefilledrectangle( $img, 0, 0, $this->width, $this->height, $bg_color );

            // add point
            for($i = 0; $i < 100; $i++)
            {
                $point_color    = imagecolorallocate( $img, rand( 0, 256 ), rand( 0, 256 ), rand( 0, 256 ));
                $rand_x            = rand(0, $this->width);
                $rand_y            = rand(0, $this->height);

                imageline( $img, $rand_x, $rand_y, $rand_x + 1, $rand_y + 1, $point_color );
            }

            // add letter
            $x = ($this->width - (imagefontwidth(5) * $letters)) / 2;
            $y = ($this->height - imagefontheight(5)) / 2;
            imagestring($img, 5, $x, $y, $word, $txt_color);

            // print image
            header('Expires: Thu, 01 Jan 1970 00:00:00 GMT');
            // HTTP/1.1
            header('Cache-Control: private, no-store, no-cache, must-revalidate');
            header('Cache-Control: post-check=0, pre-check=0, max-age=0', false);
            // HTTP/1.0
            header('Pragma: no-cache');
            header('Content-type: image/jpeg');
            imagejpeg($img);
            imagedestroy($img);
        }

        /**
         * encrypts captha
         * @param   string  $word
         * @return  string
         */
        private function _encrypts( $word )
        {
            return md5( $word );
        }

        /**
         * make catpcha
         * @access  private
         * @param   integer $length
         * @return  string
         */
        private function generateWord( $length = 4 )
        {
            /*
             * make word
             */
            $chars    = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
            $word    = substr(str_shuffle( $chars ), 0, $length );

            /*
             * session
             */
            $_SESSION[$this->session_name] = $this->_encrypts( $word );

            /*
             * return
             */
            return $word;
        }
    }
    ?>

    使用

    //生成验证码图片

    $cap  = new Captcha();

    $cap->generateImage();

    //验证

    $cap  = new Captcha();

    $cap->check($_POST['captcha']);

  • 相关阅读:
    python习题一
    华为区块链平台
    百度超级链 [Xuperchain]
    $$$Fabric v1.0 block结构与修改
    搭建 Hyperladger Fabric 基本流程
    python开发区块链【公有链】
    Asp.Net中WebServices的调用方式
    关于vs08生成解决方案慢的解决方法
    vs项目启动调试时,显示找不到文件问题
    新的公司
  • 原文地址:https://www.cnblogs.com/chunyin/p/3329248.html
Copyright © 2011-2022 走看看