php完整驗證碼代碼

<?php
    require_once 'string.func.php';
    //通過GD庫做驗證碼
    /**
    * 添加驗證文字
    * @param int $type
    * @param int $length
    */
    function buildRandomString($type=1,$length=4) {
        $row='';
        if ($type == 1) {
            $row = join('', range(0, 9));
        } else if ($type == 2) {
            $row = join('', array_merge(range('a', 'z'), range('A', 'Z')));
        } else if ($type == 3) {
            $row = join('', array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9)));
        };
        $row = str_shuffle($row);

        $row = substr($row, 0, $length);
        return $row;
    }

    /**
     * 生成縮略圖
     * @param int $type //包含數字或者英文
     * @param int $length 多少個字符
     * @param int $pixel 干擾小點的密度
     * @param int $dst_h 干擾線的密度
     * @param string //驗證碼在$_SESSION中的名字
     */
    function verifyImage($type=1, $length=4, $pixel=0, $line=0, $sess_name="verify") {
        //session_start();
        //創建畫布
        $width = 100;
        $height = 40;
        $image = imagecreatetruecolor($width, $height);
        $white = imagecolorallocate($image, 255, 255, 255);
        $black = imagecolorallocate($image, 0, 0, 0);
        // 用填充矩形填充畫布
        imagefilledrectangle($image, 1, 1, $width - 2, $height - 2, $white);
        $chars = buildRandomString($type, $length);
        $_SESSION[$sess_name] = $chars;
        // $fontfiles = array("MSYH.TTF", "MSYHBD.TTF", "SIMLI.TTF", "SIMSUN.TTC", "SIMYOU.TTF", "STZHONGS.TTF");
        $fontfiles = array("SIMKAI.TTF");
        //由於字體文件比較大,九隻保留一個字體,如果有需要的同學可以自己添加字體,字體在你的電腦中的fonts文件夾裏有,直接運行輸入fonts就能看到相應字體
        for ($i = 0; $i < $length; $i++) {
            $size = mt_rand(14, 18);
            $angle = mt_rand(-15, 15);
            $x = 5+$i*$size;
            $y = mt_rand(20, 26);
            $fontfile = "../fonts" . $fontfiles[mt_rand(0, count($fontfiles) - 1)];
            $color = imagecolorallocate($image, mt_rand(50, 90), mt_rand(80, 200), mt_rand(90, 180));
            $text = substr($chars, $i, 1);
            imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text);
        }
        if ($pixel) {
            for ($i = 0; $i < 50; $i++) {
                imagesetpixel($image, mt_rand(0, $width-1), mt_rand(0, $heigth - 1), $black);
            }
        }
        if ($line) {
            for ($i = 1; $i < $line; $i++) {
                $color = imagecolorallocate($image, mt_rand(50, 90), mt_rand(80, 200), mt_rand(90, 180));
                imageline($image, mt_rand(0, $width -1), mt_rand(0, $height -1), mt_rand(0, $width - 1), mt_rand(0, $heigth - 1), $color);
            }
        }
        header("content-type:image/gif");
        imagegif($image);
        imagedestroy($image);
    }

主要要點:1、如果前面沒有申明session_start();則需要申明;2、字體可以在cmf輸入fonts下載到自己定義的fonts文件夾;3、$_SESSION [$sess_name]可以通過$_POST獲得用戶輸入的驗證碼進行比較。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章