无忧技术网 - RSS订阅 
无忧技术网

php程序如何生成验证码图片


作者:[佚名] - 发布:2010-4-22 17:35:38 - 来源:无忧技术网

效验码的功能就是为了防止网上一些非法人员使用程序暴力破解用户登录信息;在ASP,PHP以及Java/Jsp 中生成的思路基本相同,均可分为三步:

第一步:生成效验码,并存放在 session 中(这事关键);

第二步:用户访问,根据效验码图片显示的数字信息输入效验码;

第三步:在服务器端,比较在第一步中存放在 session 中效验码和用户输入的效验码是否一致;

对于效验码的生成又大概可以分为以下几步:

第一步:设置 HTTP 头信息,标识当前 HTTP 流的内容类型为一个图像流,例如:image/PNG,image/bmp,image/gif 等;

第二步:启用 session(在 asp和 java/jsp 中这个是默认打开的),生成随机数子并将其保存在 session 中;

第三步:创建一个图片对象或数据;

第四步:将随机数字写入到第三步中生成的图像中;

第五步:加入干扰图像,并最终生成一个图片数据流,释放相关的资源;

下面是一个 PHP 的例子,我已经测试过,供大家参考,
注意:要想创建图片,在 php 中要加载相关的图像函数库!


一:效验码生成页面:(checkcode.php)

<?php
//设置文件头;
Header("Content-type: image/PNG");

//启用session;
session_start();
//生成随机数;
srand((double)microtime()*1000000);
while(($checkcode=rand()%10000)<1000);
//保存效验码到session中;
$_SESSION['checkcode']=$checkcode;

//生成验证码图片;
$im = imagecreate(50,22);
$black = ImageColorAllocate($im, 0,0,0);
$white = ImageColorAllocate($im, 255,255,255);
$gray = ImageColorAllocate($im, 200,200,200);
imagefill($im,68,30,$gray);
//将四位整数验证码绘入图片;
imagestring($im, 5, 8, 3, $checkcode, $white);

//加入干扰象素;
for($i=0;$i<200;$i++){
 $randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
 imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
}
//以PNG格式将图像输出到浏览器或文件;
ImagePNG($im);

//销毁一图像,释放与image关联的内存;
ImageDestroy($im);
?>


二:效验码输入页面:(input.php)

<form name="form1" method="post" action="check.php">
  <img src="checkcode.php">
  <input name="checkcode" type="text" id="checkcode">
  <input type="submit" name="Submit" value="提交">
</form>


三:验证页面:(check.php)

<?php
session_start();

$checkcode=$_SESSION['checkcode'];
$checkcodeInput=$_POST['checkcode'];
if($checkcode==$checkcodeInput){
 echo("ok");
}else{
 echo("false");
}
?>

责任编辑:liqwei
打印本页】【关闭本页】【返回列表
·上一篇:没有了!
·下一篇:浅谈PHP程序开发中的缓存技术
 文章评分
  • current rating
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
 相关文章
·[运维管理]国外百万级PHP网站架构分析 (2011-08-18)
·[PHP]优秀的PHP程序员至少应该了解PHP代码的优缺点 (2011-08-18)
·[PHP]PHP6将实现的8个特性和功能 (2011-08-17)
·[PHP]PHP容易被人忽略的10件事 (2011-08-08)
·[PHP]PHP 5.3/5.2 版本的选择 (2011-02-18)
 相关评论
 站点最新文章 更多>> 
·[经典影音]弱点
·[经典影音]萨利机长
·[经典影音]天空之眼
·[管理知识]康奈尔笔记法,提高100%学习效率
·[管理知识]刘强东:我管75000人靠这4张表格
·[管理知识]跟壳牌学HSE管理
·[运营策划]编辑工作内容整理
·[至理名言]奋斗与决定
·[瀚海拾遗]盲人打灯笼之各家论道
·[搞笑段子]中国男足
 站点浏览最多 更多>> 
·[协议规范]http断点续传原理:http头 Range、…
·[JS/CSS/HTML]HTML 空格的表示符号 nbsp / en…
·[NoSQL]Mongo数据库简介
·[协议规范]什么是SPF记录?如何设置、检测SP…
·[协议规范]图解 HTTPS 通信过程
·[PHP]精选国外免费PHP空间推荐
·[程序综合]常用IP地址查询接口
·[程序综合]什么是 DNS Prefetch ?
·[程序综合]获取客户端IP地址的三个HTTP请求…
·[Linux]/usr 目录的由来