实现数字或字母,数字混合验证码

##实现数字或字母,数字混合验证码php

1.首先定义验证码的背景图片算法

<?php 
session_start();//开启session;

$image=imagecreatetruecolor(100, 30);//生成一张长100,高30的背景(默认颜色是黑色)
$bgcolor=imagecolorallocate($image, 255, 255, 255);//把背景定义白色
imagefill($image,0,0,$bgcolor);//所定义的颜色进行区域填充

2.1这里是实现数字验证码的关键部分session

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);//销毁)关闭啦,毕竟作事我们有头有尾是吧。code

header('content-type:image/png');//定义图片类型
imagepng($image);//输出
imagedestroy($image);//销毁
?>

这个就是我们的成果啦