当前位置:编程学习 > php >>

PHP简单验证码类:字母+数字 字体随机扭曲

   现在各式各样的验证码,个人认为验证码是让用户看的,所以简单就好。什么干扰码,倾斜,复杂的背景 都是对用户的一种折磨。
      看了一些比较大的体验比较好的网站验证码都较为简单,没有复杂的背景,没有干扰码,没有背景。
      有什么地方写的不好的欢迎大家批评,指点。
[php] 
<?php 
if (!defined('IS_INITPHP')) exit('Access Denied!'); 
/*********************************************************************************
 * InitPHP 2.0 国产PHP开发框架  扩展类库-验证码
*-------------------------------------------------------------------------------
* 版权所有: CopyRight By initphp.com
* 您可以自由使用该源码,但是在使用过程中,请保留作者信息。尊重他人劳动成果就是尊重自己
*-------------------------------------------------------------------------------
* $Author:liuxinming
* $Dtime:2012-10-09
***********************************************************************************/ 
class seccodeInit{ 
    private $width; 
    private $height; 
    private $type=0;// 0 字母+数字验证码 
    private $time=3000;//验证码过期时间(s) 
    private $color=null;//验证码字体颜色 
    private $im; 
    private $length=4;//验证码长度 
    private $warping;//随机扭曲 
     
    /**
     * 获取随机数值
     * @return string
     */ 
    private function get_random_val() { 
        $i=0; 
        while($i<$this->length) 
        { 
            mt_srand((double)microtime()*1000000); 
            $randnum=mt_rand(50,90); 
            if(!in_array($randnum,array(58,59,60,61,62,63,64,73,79))) 
            { 
                $authnum=$authnum.chr($randnum); 
                $i++; 
            } 
        } 
        session_start(); 
        $time=time(); 
        $checkcode=md5(md5($authnum.'initphpYzmsy'.$time)); 
        $key=$time.','.$checkcode.','.authnum; 
        $_SESSION['initphp_code'] = $key; 
        return $authnum; 
    } 
     
    /**
     * 获取验证码图片
     * @param $width 宽
     * @param $height 高
     * @param $warping 字体随机扭曲开关 0=关,1=开
     * @return string
     */ 
    public function getcode($width=140,$height=40,$warping=0){ 
        $this->width=$width; 
        $this->height=$height; 
        $this->warping=$warping; 
        if($this->type<2&& function_exists('imagecreate') && function_exists('imagecolorset') && function_exists('imagecopyresized') && function_exists('imagecolorallocate') && function_exists('imagechar') && function_exists('imagecolorsforindex') && 
function_exists('imageline') && function_exists('imagecreatefromstring') && (function_exists('imagegif') || function_exists('imagepng') || function_exists('imagejpeg'))){ 
            $this->image(); 
        } 
    } 
    /**
     * 生成图片验证码
     * @return string
     */ 
    public function image(){ 
        $this->im=imagecreate($this->width, $this->height);//设置图片背景大小 
        imagecolorallocate($this->im, 243, 251, 254);// 设置背景   
        $this->color=imagecolorallocate($this->im, mt_rand(1,120), mt_rand(1,120), mt_rand(1,120));// 验证码字体随机颜色 
        $ttfPath = dirname(__FILE__) . '/font/';//字体目录 
        $dirs = opendir($ttfPath); 
        $seccodettf = array(); 
        while($entry = readdir($dirs)) { 
            if($entry != '.' && $entry != '..' && in_array(strtolower(addslashes(strtolower(substr(strrchr($entry, '.'), 1, 10)))), array('ttf', 'ttc'))) { 
                 
                $seccodettf[] = $ttfPath.$entry; 
            } 
        } 
        $ttf = $seccodettf[array_rand($seccodettf)];//随机一种字体 
        $size = $this->type ? $this->width / 7 : $this->width / 6;//字体大小 
        imagettftext($this->im,$size, 0, 10, $size*1.2, $this->color, $ttf, $this->get_random_val());//设置验证码字符 
        if($this->warping){//随机扭曲 
            $this->setWarping(); 
        } 
        if(function_exists("imagepng")) 
        { 
            header ("Content-type: image/png"); 
            $code=imagepng($this->im); 
        }elseif (function_exists("imagejpeg")) 
        { 
            header ("Content-type: image/jpeg"); 补充:Web开发 , php ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,