验证码几乎是每个网站都要用到的东西,它的存在也是为了防止黑客恶意注册或者恶意破解用户密码等。现在一般常见的验证码有有数字型,数字+字母型,汉字型,算术型这几种类型。下面介绍的是数字+字母类型的验证码。在此之前我们需要知道验证码的原理:也就是通过php扩展的GD库,生成一张带验证码的图片,并将验证码保存在session中,最后再与表单提交的验证码数据作对比。所以,首先我们要做的是需要打开GD库,在php.ini中,找到extension=php_gd2.dll,去掉前面的分号即可(分号代表注释)。然后话不多说,直接上代码。
<?php
session_start();
//这里我是生成4个数字/字母,可以自己修改
for($i=0;$i<4;$i++)
{
$nmsg .=dechex(mt_rand(0,15));
}
//存入session中
$_SESSION['code']=$nmsg;
//创建一张图片,设置高度和宽度
$width=75;
$height=25;
$img=imagecreatetruecolor($width, $height);
//选择图标的颜色颜色
$imgcolor=imagecolorallocate($img, 255, 255, 255);
//填充颜色
imagefill($img, 0, 0, $imgcolor);
//随机画出6个线条
for($i=0;$i<6;$i++)
{
//设置随机色
$imgcolor=imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imageline($img,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),$imgcolor);
}
//随机画出100个雪花
for($i=0;$i<100;$i++)
{
$imgcolor=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($img, 1, mt_rand(0,$width), mt_rand(0,$height), "*", $imgcolor);
}
//输出验证码
for($i=0;$i<strlen($_SESSION['code']);$i++)
{
$imgcolor=imagecolorallocate($img, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100));
//这里是把每个验证码的位置划分为四个区域,这样才能正确有序地显示验证码
imagestring($img, 5, $i*$width/4+mt_rand(0,10), mt_rand(1,$height/2), $_SESSION['code'][$i], $imgcolor);
}
//输出图像
header('Content-Type:image/png');
imagepng($img);
//销毁图像
imagedestroy($img);
<?php
session_start();
//这里我是生成4个数字/字母,可以自己修改
for($i=0;$i<4;$i++)
{
$nmsg .=dechex(mt_rand(0,15));
}
//存入session中
$_SESSION['code']=$nmsg;
//创建一张图片,设置高度和宽度
$width=75;
$height=25;
$img=imagecreatetruecolor($width, $height);
//选择图标的颜色颜色
$imgcolor=imagecolorallocate($img, 255, 255, 255);
//填充颜色
imagefill($img, 0, 0, $imgcolor);
//随机画出6个线条
for($i=0;$i<6;$i++)
{
//设置随机色
$imgcolor=imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imageline($img,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),$imgcolor);
}
//随机画出100个雪花
for($i=0;$i<100;$i++)
{
$imgcolor=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($img, 1, mt_rand(0,$width), mt_rand(0,$height), "*", $imgcolor);
}
//输出验证码
for($i=0;$i<strlen($_SESSION['code']);$i++)
{
$imgcolor=imagecolorallocate($img, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100));
//这里是把每个验证码的位置划分为四个区域,这样才能正确有序地显示验证码
imagestring($img, 5, $i*$width/4+mt_rand(0,10), mt_rand(1,$height/2), $_SESSION['code'][$i], $imgcolor);
}
//输出图像
header('Content-Type:image/png');
imagepng($img);
//销毁图像
imagedestroy($img);
?>
以上就是验证码的代码,如果图片显示不出来的话,那最好是在header('Content-Type:image/png');这行代码的前面添加上ob_clean(),它的作用是丢弃输出缓冲区的内容,哪怕你只是在你的生成验证码代码的前面输出了一个空行,验证码也无法显示出来的,所以这里需要注意一下,最好加上ob_clead()。