PHP生成一个简单的验证码图片

来源:互联网 发布:php记录访客信息 编辑:程序博客网 时间:2024/05/16 15:35

解决问题:用PHP做一个简单的验证码;

说明:我本身是一个前端,工作久了之后发现要是不掌握一门后端开发语言的话,会有一种无力感。最近在边做自己的个人网站边学习php,在写登录注册的时候,为了防止暴力注册或者暴力破解,需要完成一个简单的验证码验证流程。于是就自己写了一个生成验证码的小接口,希望对需要的人有所帮助。

代码如下:代码里面的注释包含了我在写这段生成验证码代码的时候的,一些心路历程,想了一下没有删掉,反正不影响运行结果!
<?php/* date:2017-09-04, * 功能:实现验证码, * 补充:目前只是简单说明了一些绘制图片的一些常用的方法,具体的验证码功能等待继续完善 *//*使用GD的imagecreatetruecolor();创建一张背景图 * imagecreatetruecolor()新建一个真彩色图像,代表了一副大小为x_size和y_size的黑色图像 * 参数两个,分别是imagecreatetruecolor ( int $width , int $height ),图像宽度和图像高度 * 返回值:成功后返回图像资源,失败后返回false * 默认生成黑色背景 */$image=imagecreatetruecolor(200,60);/* imagecolorallocate ( resource $image , int $red , int $green , int $blue ) * imagecolorallocate() 返回一个标识符,代表了由给定的 RGB 成分组成的颜色。red,green 和 blue 分别是所需要的颜色的红,绿,蓝成分。这些参数是 0 到 255 的整数或者十六进制的 0x00 到 0xFF。imagecolorallocate() 必须被调用以创建每一种用在 image 所代表的图像中的颜色。  * 如果分配失败则返回 -1。  * 这里提到另外一个函数 * imagecolorallocatealpha() 的行为和 imagecolorallocate() 相同,但多了一个额外的透明度参数 alpha,其值从 0 到 127。0 表示完全不透明,127 表示完全透明。 如果分配失败则返回 FALSE。   *///生成填充色,该实例是红色(填充成为img的背景颜色,即底色。这是我开始的错误理解,这里只不过是制造了一种颜色而已)$bgcolor=imagecolorallocate($image,255,0,0);//白色$white=imagecolorallocate($image,255,255,255);//绿色$green=imagecolorallocate($image,0,255,0);//蓝色$blue=imagecolorallocate($image,0,0,255);/*bool imagefill ( resource $image , int $x , int $y , int $color ) * imagefill() 在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)。 * 暂时没有发现设置x,y有什么用 *///将填充色填充到背景图上---现在我认为应该说成是用什么颜色作为图片的背景颜色(填充色)imagefill($image,0,0,$blue);/*mt_rand — 生成更好的随机数 * 很多老的 libc 的随机数发生器具有一些不确定和未知的特性而且很慢。PHP 的 rand() 函数默认使用 libc 随机数发生器。mt_rand() 函数是非正式用来替换它的。该函数用了 » Mersenne Twister 中已知的特性作为随机数发生器,它可以产生随机数值的平均速度比 libc 提供的 rand() 快四倍。  * int mt_rand ( int $min , int $max ) * 参数min可选的、返回的最小值(默认:0)  * max可选的、返回的最大值(默认:mt_getrandmax())  */$num=mt_rand(1000, 9999);/* * 将生成的数字存到session里面,便于之后对验证码进行验证 *  * */session_start();$_SESSION['vercode']=$num;/* * bool imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ) * imagestring() 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。  *///这个才是最重要的方法imagestring($image,100,30,3,$num,$white);//显示图片的时候要声明头信息header("Content-type:image/png");//在使用这个方法之前,一定要先设置头信息,否则不会正常的显示图片 imagepng($image);//释放资源,销毁执行对象,适时的释放资源会减轻对服务器请求的压力。 imagedestroy($image);?>
图简单的话前端可以直接在html页面用img标签引入,src路径指向上面的php文件就可以了。
举个小例子:<img src="api/verifyCode.php" alt="验证码" />,src路径自己改啊!!!
因为本人不是专业的php开发,如果有大神看到了,有更好的办法,请指点一下,菜鸡的我谢过!