php 验证码图片 程序

<?php php 验证码图片 程序
/*
*文件名:class.safeCode.php
*类名:safeCode
*目的:生成web应用时所需的验证码图片
*当前版本:1.0.2
*作者:NoAngels
*联系方式:flare_1023@163.com QQ:82535599 MSN:atizu@hotmail.com
*开发时间:2008年06月20日
*最后更新:2008年06月21日
*更新内容:
*版本1.0.2
*1.更新了对linux主机支持,设置GDFONTPATH环境变量,
* putenv('GDFONTPATH=' . realpath('.'));
*2.对不支持antialias函数的时候避免采用此方法,避免低版本的GD库
*版本1.0.1
*1.更新了绘制指定类型图片,支持类型有:png,jpeg,gif.默认为png(此效果最佳)
*2.优化了部分代码
*/
class safeCode{
        function __construct(){
                #设置默认safe安全保护码
                $this->__safe = substr(md5(time()), 0 , 4);
        }
        function __destruct(){
                #释放资源
                unset($this->__img, $this->__canvasWidth, $this->__canvasHeight, $this->__codeLength, $this->__spacePerChar, $this->__code, $this->__safe, $this->__background, $this->__borderColor, $this->__colors, $this->__font, $this->__sessionName);
        }
        function setCanvas($width = 200, $height = 60){
                #设置画布宽度以及高度.有默认值
                $this->__canvasWidth = $width;
                $this->__canvasHeight = $height;
                $this->__img = imagecreatetruecolor($width, $height);               
                return;
        }
        function setSafe($char){
                #设置安全码,不调用系统会自己设置
                $this->__safe = $char;
                return;
        }
        function setCodeLength($num = 8){
                #设置验证码长度
                $this->__codeLength = $num;
        }       
        function setFont($fontName){
                #设置绘图时所用的字体,字体文件必须与类文件同目录
                $this->__font = $fontName;
                return;
        }
        function setBackground($arg1 = 255, $arg2 = 255, $arg3 = 255){
                #设置背景颜色
                $this->__background = imagecolorallocate($this->__img, $arg1, $arg2, $arg3);
                return;
        }
        function setBorderColor($arg1 = 128, $arg2 = 128, $arg3 = 128){
                #设置边框颜色
                $this->__borderColor = imagecolorallocate($this->__img, $arg1, $arg2, $arg3);
        }
        function setFontColor($arr){
                #设置绘图时所用颜色,参数为颜色集合数组
                foreach($arr as $color){
                        $this->__colors[] = imagecolorallocate($this->__img, $color[0], $color[1], $color[2]);
                }
                return;
        }       
        function setSession($sessionName = 'safeCode'){
                #设置session变量名,默认为$_SESSION['safeCode']
                $this->__sessionName = $sessionName;
                #$_SESSION[$sessionName] = $this->__code;
                return;
        }
        function display($type = 'png'){
                #显示图片,可指定显示类型,目前支持png(默认),jpeg,gif
                $this->__setSpacePerChar();
                imagefilledrectangle($this->__img, 1, 1, $this->__canvasWidth - 2, $this->__canvasHeight -2, $this->__background);
                imagerectangle($this->__img, 0, 0, $this->__canvasWidth - 1, $this->__canvasHeight - 1, $this->__borderColor);
                $this->__drawText($this->__colors, $this->__getCode(), $this->__font);
                #修正linux以及低版本的GD库问题
                if(function_exists(imageantialias)){
                   imageantialias($this->__img, true);
                }
                $_SESSION[$this->__sessionName] = $this->__code;
                switch ($type){
                        case 'png':
                                header('Content-type:image/png');                               
                                imagepng($this->__img);       
                        case 'jpeg':
                                header('Content-type:image/jpeg');                               
                                imagejpeg($this->__img, '' , 75);
                        case 'gif':
                                header('Content-type:image/gif');                               
                                imagegif($this->__img);       
                        default:
                                header('Content-type:image/png');                               
                                imagepng($this->__img);                                                                                                               
                }
                imagegif($this->__img);       
        }       
        private function __setSpacePerChar(){
                #私有函数,设置字符间隔
                $this->__spacePerChar = $this->__canvasWidth / $this->__codeLength;
                return;
        }
        private function __getCode(){
                #获取验证码
                $this->__code = substr(md5(time().$this->__safe), rand(0, 24), $this->__codeLength);
                return $this->__code;
        }
        private function  __drawText($colors, $code, $fontName){
                #开始绘图
                #设置GBFONTPATH为当前目录,不然linux环境下会报错
                putenv('GDFONTPATH=' . realpath('.'));
                for($i = 0; $i < strlen($code); $i++){
                        $color = $colors[$i % count($colors)];
                        imagettftext(
                                $this->__img,
                                24 + rand(0, 8),
                                -20 + rand(0, 40),
                                ($i + 0.3) * $this->__spacePerChar,
                                $this->__canvasHeight - 20 + rand(0, 20),
                                $color,
                                $fontName,
                                $code{$i}
                        );
                }
                #绘制随机实线
                for($i = 0; $i < 400; $i++){
                        $x1 = rand(5, $this->__canvasWidth - 5);
                        $y1 = rand(5, $this->__canvasHeight - 5);
                        $x2 = $x1 - 4 + rand(0, 8);
                        $y2 = $y1 - 4 + rand(0, 8);
                        imageline($this->__img, $x1, $y1, $x2, $y2, $this->__colors[rand(0, count($this->__colors) - 1)]);
                }
                return;
        }
        private $__img = NULL;
        private $__canvasWidth = 120;
        private $__canvasHeight = 80;
        private $__codeLength = 8;
        private $__spacePerChar = 0;
        private $__code = 12345678;
        private $__safe = 2008;
        private $__background = NULL;
        private $__borderColor = NULL;       
        private $__colors = array();
        private $__font = 'arial.ttf';
        private $__sessionName = '';
}
?>

使用方法.

<?php
#测试文件
include_once('class.safeCode.php');
session_start();
$safeCode = new safeCode;
$safeCode->setCanvas(200, 50);
$safeCode->setCodeLength(8);
$safeCode->setSafe('2008');#设置安全码,不设置有默认值,动态生成
$safeCode->setBackground();
$safeCode->setBorderColor();
$safeCode->setFont('arial.ttf');#设置字体.必须同目录,字体文件
$colors = array(array(128, 64, 192), array(192, 64, 128), array(108, 192, 64));
$safeCode->setFontColor($colors);
$safeCode->setSession();
$safeCode->display('jpeg');

?>

时间: 2024-10-11 17:01:23

php 验证码图片 程序的相关文章

php生成验证码图片程序

 代码如下 复制代码 <?php session_start(); if( isset($_POST['submit'])) {    if( $_SESSION['security_code'] == $_POST['security_code'] && !empty($_SESSION['security_code'] ) ) {   // Insert you code for processing the form here, e.g emailing the submiss

修改获取验证码图片到本地的PHP程序

  最近项目不是很大,所以时间比较的空间,昨天琢磨着写点东西,想起了前几天电信公司投票选微笑天使的活动,投票是要填写验证码的,想了下想写个投票作弊程序,可是等我放假回来,人家活动已经结束了,昨天突然想起来,就写了一个获取验证码图片到本地的PHP程序,以备今后有类似的投票活动可以直接拿来使用. 程序采用了PHP的GD库,原理很简单,就是先建立一张空白图片,然后把验证码的图片使用PHP GD库中的imagecreatefromjpeg函数建立一个image对象,最后计算图片的长宽,再次使用PHP内置

如何使用ASP制作验证验证码图片

验证码 一般,你可以看到一些验证码图片即是如此/ 为什么需要验证码 有效防止某个黑客对某一个特定注册用户,用特定程序暴力破解方式进行不断的登陆尝试,即防止暴力注册/穷取密码/服务器拒绝等可能影响网站正常运行的行为. 验证码的运行机制是什么 在随机产生验证码的同时生成了一Session,然后通过表单递交数据与Session中保存的验证码进行比较,正确即验证码通过,否则出错提示. 1,XBM文件 这是一个很简单的显示XBM图片的例子,数字掩码是主要. <%@ Language=javascript

JAVA论坛中验证码图片无法显示的问题

问题描述 论坛位置:http://bbs.whotrip.com/,登陆处的验证码图片无法显示,因为不熟悉JSP程序,特来向各位请教,请帮帮我吧,有人提议修改:DRAWRANDSERVLET.CLASS中的javax/imageio/ImageIO+writeI(Ljava/awt/image/RenderedImage;Ljava/lang/String;Ljava/io/OutputStream;),但是我也不知道怎么改,求各位帮忙了 解决方案 解决方案二:JspRun!社区论坛系统,免费的

使用ashx文件生成验证码图片

 在vs2005中可以直接创建.ashx文件,其项目叫做一般处理程序,.ashx文件一般用来处理只有返回,二一般不回传的数据,比如动态生成图片,或者文字,以下为清清月儿博客上转载的一个用ashx动态生成验证码图片的代码. //绘制验证码图片ValidateImageHandler.ashx 1 <%@ WebHandler Language="C#" Class="ValidateImageHandler" %> 2  3 using System; 4

C#实现返回验证码图片的类库源码

验证码字符个数.生成图片宽度.高度自定均可由构造方法自定,无参构造生成默认字符个数和默认大小的Image,方法 GetImgWithValidateCode()返回生成的验证码图片,方法 IsRight(string inputValCode) 判断用户输入的验证码 inputValCode与图片显示的字符是否一致,不区分大小写 using System; using System.IO; using System.Data; using System.Configuration; using

asp.net验证码图片生成示例

 网站验证码是一种很常用的技术.下面我介绍下技术上是如何实现的 验证码是一张图片.我们需要在前台代码中写一段<img>,src指向一张页面(ValidateImage.aspx).   代码如下: <script language="javascript">           function changeImg() {             $("#imgCheckNo").attr("src", "Val

WebBrowser截取网页上的验证码图片

  引言 最近和一位朋友探讨获取WebBrowser访问的网页中验证图片的方法,起先想到的就是通过WebClient直接去下载当前页面中引用的验证码图片,但继而想到这会涉及一些问题:一是验证码可能会在每次请求时都发生变化,二是将WebClient与WebBrowser的Cookies甚至Session关联起来是件很难的事. 而后就想到了可以放弃WebBrowser,始终使用WebRequest进行较为底层的访问,以避免多次获取验证码产生变化导致不一致的情况,不过这种办法操作起来还是比较复杂的.

PHP验证码图片不能输出解决办法

  PHP验证码图片不能输出 文件名 global_func.php function _code(){ //运行验证码 //随记码个数 $_rnd_code=4; for($i=0;$i<$_rnd_code;$i++){ $_nmsg.=dechex(mt_rand(0, 15)); } //保存在session中 $_SESSION['code']=$_nmsg; //长和高 $_width=75; $_height=25; //创建一张图片 $_img=imagecreatetrueco