Chinaunix首页 | 论坛 | 博客
  • 博客访问: 226182
  • 博文数量: 75
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 848
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-08 10:27
文章分类
文章存档

2014年(9)

2013年(66)

我的朋友

分类: PHP

2013-11-07 15:13:32

以前总是觉得图片验证码很诡秘的,但是今天看了看网上的教程,发现并不像想象中那么难,PHP5具体实现如下。createphoto.php文件用来生成图片验证码,并通过session向test.php传递验证码内容;而test.php则在表单中引用生成的图片和验证用户的输入。




代码实现(PHP5)


[php] view plaincopy
#createphoto.php  
#启用session  
session_start();  
#生成4个随机字符  
$ary = 'qwertyuiopasdfghjklzxcvbnm0123456789';  
for ($i = 0; $i < 4; $i++) {  
    $index = rand(0, 35);  
    $rundstr .= $ary[$index];  
}  
#把随机数保存到session  
$_SESSION[rundstr] = $rundstr;  
#图片尺寸  
$x_size = 100;  
$y_size = 30;  
#新建一个真彩色图像  
$img = imagecreate($x_size, $y_size);  
#生成各种颜色  
imagecolorallocate($img, 230, 230, 230); #设置图片的背景色  
$fontcolor = imagecolorallocate($img, 0, 0, 0); #生成字体的颜色  
$pointcolor = imagecolorallocate($img, 0, 0, 0); #生成噪点的颜色  
#添加200个噪点  
for ($i = 0; $i < 200; $i++) {  
    imagesetpixel($img, rand(0, $x_size), rand(0, $y_size), $pointcolor);  
}  
//添加5条干扰线  
for ($i = 0; $i < 5; $i++) {  
    $linecolor = imagecolorallocate($img, rand(0, 225), rand(0, 225), rand(0, 225)); #生成干扰线的颜色  
    imageline($img, rand(0, 100), 0, rand(0, 100), rand(0, 30), $linecolor);  
}  
#绘图  
imagestring($img, 6, rand(0, 30), rand(5, 12), $rundstr, $fontcolor);  
//显示图片  
header("Content_type:image/jpeg");  
imagejpeg($img);  
?>  


[php] view plaincopy
#test.php  
#启动session  
session_start();  
#验证  
if ($_POST[inputvalue]) {  
    if ($_POST[inputvalue] == $_SESSION[rundstr]) {  
        echo "成功";  
    } else {  
        echo "失败";  
    }  
}  
?>  
 
   
 
 
   
 
说明
1、首先要启动gd库,可通过WampServer(PHP -> PHP扩展 -> php_gd2),或修改PHP.ini文件(去掉extension=php_gd2.dll前的";"号);
2、imagecreate ( int x_size, int y_size ) // 创建图像,返回图像对象,x就是宽 ,y就是高;
3、imagecolorallocate ( resource image, int red, int green, int blue ) // 第一次调用是为图像设置颜色,返回颜色的值;
4、imagestring ( resource image, font, int x, int y, 内容 , 颜色 ) // 绘图;
5、rand( int x, int y ) // 生成随机数,范围[x , y]闭区间;
6、imagesetpixel ( resource image, int x, int y, int color ) // 画点,xy是点在图像中的坐标;
7、imageline ( resource image, int x1, int y1, int x2, int y2, int color ) // 画线,x1y1是起始点坐标,x2y2是终点坐标;
8、header("Content_type:image/jpeg") // 说明文件类型
9、imagejpeg($img) // 显示图片

阅读(816) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~