PHP验证码的制作

时间:2022-12-23 13:10:45
<?php 
if(!isset($_SESSION)){ //判断session是否开启
session_start();
}
/*
*随机生成验证码函数
*param $m:验证码位数 默认值为4
*param $type:验证码类型 0:数学 1:数字+小写字母 2:数字+大小写字母
*/
function getCode($m=4,$type=0){
$str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$t = array(9,35,strlen($str)-1);//t[0]:0-9:数字 ;t[2]:0-35:数字+小写字母 ;t[2]:0-最后:所有字符;
$c ="";
for($i=0; $i<$m; $i++){
$c.=$str[rand(0,$t[$type])];
}
return $c;
}

//1.获取验证码字符
$num=4;
$str = getCode($num,0);
$_SESSION['verifycode'] = $str;
//2.创建画布
$width=$num*20;
$height=30;
$im = imagecreatetruecolor($width,$height);
$c = imagecolorallocate($im,111,0,55);
$rect = imagecolorallocate($im,20,0,190);
$bg = imagecolorallocate($im,200,200,200);
//3.开始绘制
imagefill($im,0,0,$bg);//背景色
imagerectangle(
$im,0,0,$width-1,$height-1,$rect);//边框
//4.添加干扰点
for($i=0; $i<200; $i++){
$c = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel(
$im,rand(0,$width),rand(0,$height),$c);
}
//5.添加干扰线
for($i=0; $i<5; $i++){
$c = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imageline(
$im,rand(0,$width),rand(0,$height),rand(0,$width),rand(0,$heigth),$c);
}
//6.绘制验证码内容
for($i=0; $i<$num; $i++){
imagettftext(
$im,18,8+(10*$i),8+(18*$i),24,$c,"plantc.ttf",$str[$i]);//plantc.ttf为字体文件,根据实际路径设置
}
//7.输出验证码图形
header("Content-Type:image/png");
imagepng(
$im);
imagedestroy(
$im);
?>

这里只是PHP验证码的制作部分,关于验证码的使用还需根据具体的情况而定。