一个验证码的生成
先写一个验证码生成的函数
function getCode($length=4,$type=0) { $str="0123456789qwertyuipasdfghjkzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"; $t=strlen($str)-1; switch ($type) { case 0: $t=9; break; case 1: $t=33; break; default: $t=strlen($str)-1; break; } $code = ""; for ($i=0; $i <$length ; $i++) { $code .=$str[rand(0,$t)]; } return $code; }
有0-9,a-z,A-z组成,33个是少了几个混淆的字母
strlen 的运用
还有rand 随机产生一个整数
写完 一个随机的验证码
可以echo $code;
看一下这个随机的四个字符
当然这不是完 还需要做一个画布 就是一个图像 需要让产生出来的随机验证码出现在画布上
还可以增加干扰线 以及干扰点
$lg=4; $code = getCode($lg,3); $width = $lg*20; $height = 30; $im = imagecreatetruecolor($width,$height); $color[] = imagecolorallocate($im,111,0,255); $color[] = imagecolorallocate($im,0,0,55); $color[] = imagecolorallocate($im,241,0,241); $color[] = imagecolorallocate($im,11,0,125); $bg = imagecolorallocate($im,240,240,240); for ($i=0; $i <200 ; $i++) { $cc = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)); imagesetpixel($im,rand(0,$width),rand(0,$height),$cc); } for ($i=0; $i <5 ; $i++) { $cc = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)); imageline($im,rand(0,$width),rand(0,$height),rand(0,$width),rand(0,$height),$cc); } imagefill($im,0,0,$bg); for ($i=0; $i <$lg ; $i++) { imagettftext($im,18,rand(-40,40), 8+(18*$i),24, $color[rand(0,3)], "./ht.ttf",$code[$i]); } header("Content-type:text/html; charset=utf-8"); header("Content-Type:image/png"); imagepng($im); imagedestroy($im);
使用 GD和图像处理函数
imagecreatetruecolor创建一个画布
imagefill
将验证码放入画布
imagettftext 参数有点多
![](https://images2018.cnblogs.com/blog/1371075/201804/1371075-20180425164857397-429673664.png)
imagecolorallocate 在画布中创建一个颜色
imagesetpixel 接下来创建干扰点
在for里面创建一个点 循环两百次
imageline然后是干扰线
header 发送原生http头
大概的意思就是 在PHP文件中创建html的内容比如 定义编码 创建图像域
imagepng 输出验证码图片
imagedestroy 销毁图像 不保存
好了 这就结束了
<?php $lg=4; $code = getCode($lg,3); $width = $lg*20; $height = 30; $im = imagecreatetruecolor($width,$height); $color[] = imagecolorallocate($im,111,0,255); $color[] = imagecolorallocate($im,0,0,55); $color[] = imagecolorallocate($im,241,0,241); $color[] = imagecolorallocate($im,11,0,125); $bg = imagecolorallocate($im,240,240,240); for ($i=0; $i <200 ; $i++) { $cc = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)); imagesetpixel($im,rand(0,$width),rand(0,$height),$cc); } for ($i=0; $i <5 ; $i++) { $cc = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)); imageline($im,rand(0,$width),rand(0,$height),rand(0,$width),rand(0,$height),$cc); } imagefill($im,0,0,$bg); for ($i=0; $i <$lg ; $i++) { imagettftext($im,18,rand(-40,40), 8+(18*$i),24, $color[rand(0,3)], "./ht.ttf",$code[$i]); } header("Content-type:text/html; charset=utf-8"); header("Content-Type:image/png"); imagepng($im); imagedestroy($im); function getCode($length=4,$type=0) { $str="0123456789qwertyuipasdfghjkzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"; $t=strlen($str)-1; switch ($type) { case 0: $t=9; break; case 1: $t=33; break; default: $t=strlen($str)-1; break; } $code = ""; for ($i=0; $i <$length ; $i++) { $code .=$str[rand(0,$t)]; } return $code; } ?>