PHP实现验证码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP实现验证码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2133字,纯文字阅读大概需要4分钟。
内容图文
![PHP实现验证码](/upload/InfoBanner/zyjiaocheng/1316/d4b70241b5af4f179e1ef56da614a0f2.jpg)
第二步:创建颜色
第三步:准备字符
第四步:往 画布上写字符
第五步:画干扰线(点)
第六步:输出格式
第七步:输出图片
第八步:销毁资源
<?php verify(); function verify($width = 100 , $height = 40 , $num = 5 , $type = 3 ){ //1 创建画布 $image = imagecreatetruecolor($width , $height); //2 创建颜色 //因为后边总是用,所以写了两个函数,分别是lightColor(浅颜色)、deepColor(深颜色) //3 创建字符 //这里是自己选择的类型,1 就是纯数字,2 就是纯小字母, 3 就是数字大小写字母的混合 switch($type){ case 1: //定义字符串 $str = "0123456789"; //打乱字符串 $strNew = str_shuffle($str); //截取$num个 $string = substr($strNew , 0 , $num); break; case 2: //定义字符 $arr = range('a' , 'z'); //打乱字符串数组 shuffle($arr); //截取 $tmp = array_slice($arr , 0 , $num); //连成字符串 $string = join('' , $tmp); break; case 3: $str = "23456789abcdefghjklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ"; $string = substr(str_shuffle($str) , 0 , $num); break; } //给背景填充浅颜色 //背景颜色太深的话验证码就看不清了 imagefilledrectangle($image , 0 , 0 , $width , $height , lightColor($image)); //4 往画布上写入字符 for($i = 0; $i<$num; $i++) { //因为我们设定的是输出5 个字符,所以$i是小于的$num //floor是取整,$width / $num 把宽度分了$num块地,*$i是一个字符占一块地,以免全都堆在一块看不出来 $x = floor($width / $num) * $i; $y = mt_rand(10 , $height - 20); imagechar ($image , 5 , $x , $y , $string[$i] , deepColor($image)); } //5 画干扰线、点 //干扰线 for($i = 0; $i<$num; $i++) { imagearc ($image , mt_rand(10 , $width) , mt_rand(10 , $height) , mt_rand(10 , $width) , mt_rand(10 , $height) , mt_rand(0 , 10) , mt_rand(0 , 270) , deepColor($image)); } //干扰点 for( $i = 0; $i<50; $i++) { imagesetpixel($image , mt_rand(0 , $width) , mt_rand(0 , $height) , deepColor($image)); } ob_clean();//擦除缓冲区 //6 告诉浏览器输出格式:png header("Content-type: image/png"); //7 输出图片 imagepng($image); //8 销毁 imagedestroy($image); return $string; //echo $string; } //设置深浅颜色 function lightColor ($image) { return imagecolorallocate($image , mt_rand(120 , 255) , mt_rand(120 , 255) , mt_rand(120 , 255)); } function deepColor ($image) { return imagecolorallocate($image , mt_rand(0 , 120) , mt_rand(0 , 120) , mt_rand(0 , 120)); } ?>
特别说明:
ob_clean();//擦除缓冲区
之前是没有加上这个的,结果就告诉我“因存在错误而无法显示”,如下图:
不过幸运的是,在百度上找到答案了:https://blog.csdn.net/ghbfgb/article/details/50845075。加上之后,就很轻易的解决了这个问题,现在的效果是这样的:
好了。
原文:http://blog.51cto.com/13534640/2090513
内容总结
以上是互联网集市为您收集整理的PHP实现验证码全部内容,希望文章能够帮你解决PHP实现验证码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。