基于PHP制作验证码
网站注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,为了防止网站被机器恶意注册。
生成验证码无非就那么几个步骤,首先是获取一个随机字符串,然后创建一个布画,将生成的字符串写到布画上,我们还可以在布画上画线画雪花,现在帖一段生成验证码的代码。
源代码:
<?php session_start();//开启session //创建随机码,并保存在session中 for($i=0;$i<4;$i++) { $_nmsg.=dechex(mt_rand(0,15)); } //保存到session中 $_SESSION['code']=$_nmsg; //设置图片长和高 $_width=75; $_height=25; //创建一张图像 $_img=imagecreatetruecolor($_width,$_height); //白色背景 $_white=imagecolorallocate($_img,255,255,255); //填充到背景上 imagefill($_img,0,0,$_white); //黑色边框 $_black=imagecolorallocate($_img,0,0,0); imagerectangle($_img,0,0,$_width-1,$_height-1,$_black); //随即画出5个线条 for($i=0;$i<5;$i++) { $_rnd_color=imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$_rnd_color); } //雪花 for($i=0;$i<10;$i++) { $_rnd_color=imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)); imagestring($_img,1,mt_rand(1,$_width),mt_rand(1,$_height),"*",$_rnd_color); } //输出验证码 for($i=0;$i<strlen($_SESSION['code']);$i++) { imagestring($_img,5,10+$i*15,mt_rand(0,10),$_SESSION['code'][$i],$_blackr); } //输出图像 header('Content-Type:image/png'); imagepng($_img); //销毁图像 imagedestroy($_img); ?>
代码中将使用以下函数:
mt_rand—生成更好的随机数
intmt_rand([int$min],int$max)很多老的libc的随机数发生器具有一些不确定和未知的特性而且很慢。PHP的rand()函数默认使用libc随机数发生器。
mt_rand()函数是非正式用来替换它的。该函数用了MersenneTwister中已知的特性作为随机数发生器,它可以产生随机数值的平均速度比libc提供的rand()快四倍。
dechex—十进制转换为十六进制返回一字符串,包含有给定number参数的十六进制表示。所能转换的最大数值为十进制的4294967295,其结果为"ffffffff"。
imagecreatetruecolor—新建一个真彩色图像
resourceimagecreatetruecolor(int$x_size,int$y_size)
imagecreatetruecolor()返回一个图像标识符,代表了一幅大小为x_size和y_size的黑色图像。
imagecolorallocate—为一幅图像分配颜色
intimagecolorallocate(resource$image,int$red,int$green,int$blue)
imagecolorallocate()返回一个标识符,代表了由给定的RGB成分组成的颜色。red,green和blue分别是所需要的颜色的红,绿,蓝成分。这些参数是0到255的整数或者十六进制的0x00到0xFF。imagecolorallocate()必须被调用以创建每一种用在image所代表的图像中的颜色。
imagefill—区域填充
boolimagefill(resource$image,int$x,int$y,int$color)
imagefill()在image图像的坐标x,y(图像左上角为0,0)处用color颜色执行区域填充(即与x,y点颜色相同且相邻的点都会被填充)。
imagerectangle—画一个矩形
boolimagerectangle(resource$image,int$x1,int$y1,int$x2,int$y2,int$col)
imagerectangle()用col颜色在image图像中画一个矩形,其左上角坐标为x1,y1,右下角坐标为x2,y2。图像的左上角坐标为0,0。
imageline—画一条线段
boolimageline(resource$image,int$x1,int$y1,int$x2,int$y2,int$color)
imageline()用color颜色在图像image中从坐标x1,y1到x2,y2(图像左上角为0,0)画一条线段。
imagestring—水平地画一行字符串
boolimagestring(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,则使用内置字体。
imagepng—以PNG格式将图像输出到浏览器或文件
imagepng()将GD图像流(image)以PNG格式输出到标准输出(通常为浏览器),或者如果用filename给出了文件名则将其输出到该文件。
imagedestroy—销毁一图像
imagedestroy()释放与image关联的内存。
将源代码保存为code.php是个php文件,我们该如何使用他呢?
imagepng已经将这个php文件输出成了png文件
直接调用就可以了
<imgsrc="mycode.php"/>
如果要使用验证码,记得开启session哦
<?php session_start(); echo$_SESSION['code']; ?>
希望本文所述对大家PHP程序设计有所帮助。