php验证码制作

有一些点需要注意:

1,创建画布,imagecreatetruecolor()
   配置颜色,imagecolorallocate()
2,用矩形填充画布,imagefilledrectangle()
3,把TrueType文本写入图像,imagettftext()
4,添加干扰点,imagesetpixel()
5, 添加干扰线,imageline()
6, header("Content-type:image/gif");
   imagegif($image);
   imagedestroy($image);//销毁资源
7,join()把数组转化为字符串,range()是范围数组
8,array_merge()把很多数组合并为一个数组
9,str_shuffle()打乱字符串
10,substr()截取字符串
验证码应该分成两部分去想,一部分是图像,一部分是文本,图像是根据gd库中的函数来完成,画布,颜色,
填充,干扰线,干扰点等,比较重要的一点是用imagettftext()把文本写入图像,文本是通过自定义随机
字符串函数获得,随机函数能够支持纯数字、大小写混合随机产生。把验证码操作封装成函数,调用即可,
调用时最好新开一个php文件。

代码如下:

image.php页面(需要调用string.php中产生随机字符串的函数)

?php
//通过GD库做验证码
function verifyImage($type=1,$length=4,$pixel=0,$line=0,$sess_name="verify"){
//创建画布
require_once'string.func.php';
$width = 80;
$height = 28;
$image = imagecreatetruecolor($width,$height);//画布
$white = imagecolorallocate($image,255,255,255);//白色
//用矩形填充画布
imagefilledrectangle($image,1,1,$width-2,$height-2,$white);
$chars = buildRandomString($type,$length);//调用函数产生随机字符串
$_SESSION[$sess_name] = $chars;//把随机字符串写入session,后面验证用户填入的是否正确时会用到
for($i=0;$i<$length;$i++){
$size = mt_rand(14,18);//mt_rand()生成随机数
$angle = mt_rand(-15,15);
$x = 5+$i*$size;
$y = mt_rand(20,26);
$fontfile = "../fonts/SIMYOU.TTF";
$color = imagecolorallocate($image,mt_rand(50,90),mt_rand(80,200),mt_rand(90,180));
$text = substr($chars,$i,1);
imagettftext($image,$size,$angle,$x,$y,$color,$fontfile,$text);//imagettftext()把TrueType文本写入图像
}
for($i=0;$i<$pixel;$i++){
  $color = imagecolorallocate($image,mt_rand(50,90),mt_rand(80,200),mt_rand(90,180));
  imagesetpixel($image,mt_rand(0,$width-1),mt_rand(0,$height-1),$color);//添加点
}
for($i=0;$i<$line;$i++){
  $color = imagecolorallocate($image,mt_rand(50,90),mt_rand(80,200),mt_rand(90,180));
  imageline($image,mt_rand(0,$width-1),mt_rand(0,$height-1),mt_rand(0,$width-1),mt_rand(0,$height-1),$color);//添加直线
}
ob_clean(); //清除之前的缓存
header("Content-type:image/gif");
imagegif($image);
imagedestroy($image);//销毁资源
}

string.php页面(产生随机字符串)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值