PHP通过GD库生成随机验证码

teaxia
2012-07-23 / 0 评论 / 182 阅读 / 正在检测是否收录...

<?php

function yzm($w=100,$h=50,$t=3,$num) {

//$w=画布宽度,$h=画布高度 ,$t=验证码字符集

// 1、 准备画布

$img=imagecreatetruecolor($w,$h);

// 2、 为画布准备调色板

//$bgcolor=imagecolorallocate($img,rand(130,255),rand(130,255),rand(130,255));

/* $s=imagecolorallocate($img,rand(1,130),rand(1,130),rand(1,130));

$d=imagecolorallocate($img,rand(130,255),rand(130,255),rand(130,255)); */

// 3、 用函数画画

imagefilledrectangle($img,0,0,$w,$h,d($img));

//使用for循环输出100个像素点干扰元素

for($i=1;$i<=100;$i++){

imagesetpixel($img,rand(0,$w),rand(0,$h),s($img));

}

//使用for循环输出4个椭圆形干扰元素

for($i=1;$i<=4;$i++){

imageellipse($img,rand(0,$w),rand(0,$w),rand(0,$w),rand(0,$w),s($img));

}

//进行字符匹配

$str=''; //声明一个变量,给他一个空值

for($i=1;$i<=$num;$i++) {

if($t<3) {

$type=$t;

}else{

$type=rand(0,2);}

switch ($type) {

case 0:

//数字

$ascii=rand(48,57);

break;

case 1:

//大写字母

$ascii=rand(65,90);

break;

case 2:

//小写字母

$ascii=rand(97,122);

break;

}

$str.=chr($ascii);

//这里循环出来是一个数组,下面通过数组加下标的形式访问

}

//使用for循环出4个字母

for ($i=0;$i<$num;$i++) {

$x=$i*($w/$num)+10;

$y=rand(2,$h-15);

imagechar($img,7,$x,$y,$str[$i],s($img));

}

// 4、 告诉服务器你画的是什么玩意

header("content-type:image/jpg");

// 5、 输出到浏览器或者保存为文件

imagejpeg($img);

// 6、 销毁资源(画布和调色板)

imagedestory($img);

}

//随机输出背景颜色

function s($img) {

return imagecolorallocate($img,rand(1,130),rand(1,130),rand(1,130));

}

//随机输出验证码颜色

function d($img) {

return imagecolorallocate($img,rand(130,255),rand(130,255),rand(130,255));

}

yzm(125,30,3,4); //参数.宽度,高度,0=验证码全是数字 1=大写字母 2=小写字母 3以上是数字和字母混编,有多少个验证码

?>

3

评论 (0)

取消