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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值