解决问题:用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开发,如果有大神看到了,有更好的办法,请指点一下,菜鸡的我谢过!