1.验证码代码如下,新建一个含如下代码的php文件,此处取名为validatecode.php:

<?php
/*
 * validatecode.php
 */
class validatecode {
    private $charset = '0123456789';
    private $code;
    private $codelen = 4;
    private $width = 163;
    private $height = 30;
    private $img;
    private $font;
    private $fontsize = 20;
    private $fontcolor;

    public function __construct($size) {
        $this->font = dirname(__file__) . '/t1.ttf';
        $this->codelen = $size;
        $this->charset = str_repeat($this->charset, 4);
    }

    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 - 10) / $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);
    }
}
?>

2.新建一个生成验证码的页面,此处取名为code.php,然后引入上面的php代码,实例化类,调用上面的doimg方法。

<?php

include("validatecode.php");
$obj = new validatecode(4);
$obj->doimg(); 

?>

3.上面的步骤做完后,就可以在其它页面通过img标签的src属性调用code.php。

<html>
    <meta charset=utf8>
    <head><title>验证码</title></head>
    <body>
        <form action="">
        用户名:<input type="text" name="username"><br>
        用户密码:<input type="password" name="userpwd"><br>
        验证码:<input type="text" name="code"><img src="code.php" alt="yzm" onclick="this.src='code.php?id='+math.random()" width="90px">
        </form>
    </body>
</html>

这样就完成了。