##实现数字或字母,数字混合验证码
1.首先定义验证码的背景图片
<?php
session_start();//开启session;
$image=imagecreatetruecolor(100, 30);//生成一张长100,高30的背景(默认颜色是黑色)
$bgcolor=imagecolorallocate($image, 255, 255, 255);//把背景定义白色
imagefill($image,0,0,$bgcolor);//所定义的颜色进行区域填充
2.1这里是实现数字验证码的关键部分
for($i=0;$i<4;$i++){
$fontsize=6;//字体大小
$fontcolor=imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));//底图已经为白色就将字体颜色设伪随机的
$fontcontent=rand(0,9);//随机生成0-9数字
$x=($i*100/4)+rand(5,10);//考虑每个字所占的宽度,设置一个算法
$y=rand(5,10);//数字放到5-10这个区间内
imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor); //在图像资源上画出随机数字
}
2.2只设置数字验证码似乎很觉得有些单一,想要实现更好的效果呢,在这里我们可以实现数字与字母混合验证码,这也是最常见的验证码。
$capatch_code="";
for($i=0;$i<4;$i++){
$fontsize=6;//字母大小
$fontcolor=imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));//底图已经为白色就将字体颜色设伪随机的
$data='abcdefghijkmnopqrstuwxy3456789';//可以把容易混淆的字母和数字去掉
$fontcontent=substr($data,rand(0,strlen($data)),1);//截取字典$data里的随机数
$capatch_code.=$fontcontent;//把验证码保存起来
$x=($i*100/4)+rand(5,10);//考虑每个字母所占的宽度,设置一个算法
$y=rand(5,10);//字母放到5-10这个区间内
imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor); //在图像资源上画出随机数字
}
$_SESSION['authcode']=$capatch_code;//验证码保存到authcode变量中
2.3验证码大体实现了,这时咱们是不是经常会看点验证码图片上有很多干扰点和干扰线条呀,这是我们就要设置干扰元素啦,小伙伴要注意的是,咱们在设置干扰元素的时候,位置和数量是关键,切记喧宾夺主啦,毕竟咱们的主角可不是干扰元素呀。
for($i=0;$i<200;$i++){//追加点,数量小于200
$pointcolor = imagecolorallocate($image, rand(50,200), rand(50,200), rand(50,200));
imagesetpixel($image, rand(1,99),rand(1,29), $pointcolor);
}
for($i=0;$i<3;$i++){//追加线,数量小于3
$linecolor = imagecolorallocate($image, rand(80,220), rand(80,220), rand(80,220));
imageline($image,rand(1,99),rand(1,29),rand(1,99),rand(1,29),$linecolor);
}
2.4 干扰元素设计好了呢,成品马上就要降生啦,咱们现在要做的就是收尾工作啦,这时候就要定义一下图片类型啦,然后并别忘了一定要输出咱们的成品哦,为了不暂用空间呢,咱们在一开始的时候是不是设置了 (session_start();//开启session),最后咱们就要用(imagedestroy($image);//销毁)关闭啦,毕竟做事咱们有头有尾是吧。
header('content-type:image/png');//定义图片类型
imagepng($image);//输出
imagedestroy($image);//销毁
?>