«

PHP动态生成图片验证码的程序源代码

时间:2024-3-3 11:01     作者:韩俊     分类: PHP


1.PHP生成验证码图片的核心代码:

get_code.php

< ?php session_start();
//验证码类
class ValidateCode {
    private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789'; //随机因子
    private $code; //验证码
    private $codelen = 4; //验证码长度
    private $width = 90; //宽度
    private $height = 30; //高度
    private $img; //图形资源句柄
    private $font; //指定的字体
    private $fontsize = 17; //指定字体大小
    private $fontcolor; //指定字体颜色
    //构造方法初始化
    public
    function __construct() {
        $this - >font = dirname(__FILE__).'/css/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/jpeg');
        imagepng($this - >img);
        imagedestroy($this - >img);
    }
    //对外生成
    public
    function doimg() {
        $this - >createBg();
        $this - >createCode();
        $this - >createLine();
        $this - >createFont();
        $this - >outPut();
    }
    //获取验证码
    public
    function getCode() {
        return strtoupper($this - >code);
    }
}
$_vc = new ValidateCode(); //实例化一个对象
$_vc - >doimg();

$_SESSION['login_check_code'] = $_vc - >getCode(); //验证码保存到SESSION中
? >

2.在HTML使用PHP验证码的方法

<div id="codeimg">
    <img id="refresh" src="get_code.php" style="cursor:pointer">
</div>

3.提交时验证验证码是否正确

$code=strtoupper($_POST['code']); //统一都将验证码字符转为大写字母

if ($code!=$_SESSION["login_check_code"]){
    echo "您获取的验证码不正确";
    exit;
}

标签: php php教程

热门推荐