PHP验证码小项目:
<?php
header(‘Content-type:image/jpeg‘);
$img=imagecreatetruecolor(120,40);//建立图像
$element=array(‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘,‘h‘,‘i‘,‘j‘,‘k‘);//验证码随机字母,设定数组
$string=‘‘;//定义变量,该变量能设定验证码随机字母
for($i=0;$i<5;$i++){
$string.=$element[rand(0,count($element)-1)];
}//实现验证码随机字母,把$element该数组循环5次,产生5个随机字母
$color1=imagecolorallocate($img,rand(200,250),rand(200,250),rand(200,250));//为新建图像随机分配颜色
$color2=imagecolorallocate($img,rand(150,200),rand(150,200),rand(150,200));//为新建图像像素点随机分配颜色
imagefill($img,0,0,$color1);//图像坐标和颜色
for($i=0;$i<100;$i++){
imagesetpixel($img,rand(0,120),rand(0,40),$color2);
}//单点像素循环100次,在页面随机坐标产生100个像素点
for($i=0;$i<3;$i++){
imageline($img,rand(0,120/2),rand(0,40),rand(60,120),rand(0,40),$color2);
}//线条循环3次,在页面随机坐标产生3条线条
imagettftext($img,25,rand(-5,5),rand(5,15),rand(30,35),$color2,‘font/Fudgie.ttf‘,$string);
//写入验证码字体,设置大小,角度,方位,颜色
imagejpeg($img);//输出格式JPEG图像
imagedestroy($img);//释放图像资源
?>
步骤1: 利用imagecreatetruecolor建立图像,用imagefill为图像定位和分配颜色。 步骤2:利用imagecolorallocate为新建立的图像随机分配颜色装入变量$color1,再把$color1装回 imagefill这个函数里面。 步骤3:利用imagecolorallocate为新建立的图像随机分配颜色装入变量$color2,再把$color2装回 imagesetpixel这个函数里面,利用imagesetpixel设置验证码上的像素点,并利用for循环, 在验证码上循环100次,产生100个随机坐标像素点。 步骤4: 利用imageline设置验证码上的线条,并利用for循环,在验证上循环3次,产生3条随机坐标的 线条,线条颜色为了快捷并没有利用imagecolorallocate创建第3种颜色,沿用了$color2,实 际项目,有需求需要再创建颜色出来。 步骤5:利用imagettftext创建验证码上的字体,该函数可以输入其他风格的字体,具体字体可以在网 上下载,下载以后,把字体TTF文件放进和当前写的PHP文件上同一目录,然后在imagettftext 上设置该TTF文件的路径即可,具体查看PHP手册,下一步是本人认为难点的一步,就是让验证 码上的字母随机转换。 步骤6:要让验证码上的字母随机转换,首先要设置一个变量$string,里面写一个数组array,数组里 面包含你想转换的随机字母,如我上面做的项目$element,里面写的一个数组,里面含有a-k 在内的字母,然后也是利用for循环,循环5次,循环a-k在内的字母里面随机5次。里面有两个 注意点,第一个是进行循环前,需要设置变量$string,而$string由于是变量需要先在循环前 重定义一下,我当初在这纠结很久,因为前两个for循环并没有变量在里面,所以导致我这里 忘记把变量重定义了,第二个注意点是rand(0,count($element)-1),为什么$element要减去1 ,后来问了各路大神才知道count这个函数是统计数组的个数,这里统计数组a-k的个数是11, 但是rand是随机数组下标的,是从程序0开始算,a-k如果a从0算起到k只能到10,而函数 $element统计个数是11,所以$element才要减去1变成10,以便rand来计算。 步骤7:输出建立图像时的格式,我这里是JPEG和释放图片资源。
以上步骤欢迎各路大神补充,交流,有写错也很正常,本人是菜鸟,不过能写上博客,都是测试出效果的,下面有效果图,大家可以看看,欢迎大家交流。
最后有个问题点,无关重要,所以也没去问,但是如果有大神,还是希望大神,大牛们能教导下:
关于我写的项目$string.=$element[rand(0,count($element)-1)],变量$string要用连接符.来连接才能随机5个字母,我尝试不加上连接符,但是只能随机出一个字母,所以我想,应该是 $element[rand(0,count($element)-1)]这个程序执行完,只能随机一个字母,然后返回变量$string,加上连接符然后继续运行,直到循环5次结束,不知道这样理解是否正确,如果有大神看到,麻烦把逻辑详细说说,小弟感激不尽。