php

位置:IT落伍者 >> php >> 浏览文章

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


发布日期:2020年03月21日
 
PHP简单验证码类:字母+数字 字体随机扭曲

看了一些比较大的体验比较好的网站验证码都较为简单没有复杂的背景没有干扰码没有背景

有什么地方写的不好的欢迎大家批评指点

[php]

if (!defined(IS_INITPHP)) exit(Access Denied!);

/*********************************************************************************

* InitPHP 国产PHP开发框架 扩展类库验证码

*

*

* $Author:liuxinming

* $Dtime:

***********************************************************************************/

class seccodeInit{

private $width;

private $height;

private $type=;// 字母+数字验证码

private $time=;//验证码过期时间(s)

private $color=null;//验证码字体颜色

private $im;

private $length=;//验证码长度

private $warping;//随机扭曲

/**

* 获取随机数值

* @return string

*/

private function get_random_val() {

$i=;

while($i<$this>length)

{

mt_srand((double)microtime()*);

$randnum=mt_rand();

if(!in_array($randnumarray()))

{

$authnum=$authnumchr($randnum);

$i++;

}

}

session_start();

$time=time();

$checkcode=md(md($authnuminitphpYzmsy$time));

$key=$time$checkcodeauthnum;

$_SESSION[initphp_code] = $key;

return $authnum;

}

/**

* 获取验证码图片

* @param $width 宽

* @param $height 高

* @param $warping 字体随机扭曲开关 =关=开

* @return string

*/

public function getcode($width=$height=$warping=){

$this>width=$width;

$this>height=$height;

$this>warping=$warping;

if($this>type<&& 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 );// 设置背景

$this>color=imagecolorallocate($this>im mt_rand() mt_rand() mt_rand());// 验证码字体随机颜色

$ttfPath = dirname(__FILE__) /font/;//字体目录

$dirs = opendir($ttfPath);

$seccodettf = array();

while($entry = readdir($dirs)) {

if($entry != && $entry != && in_array(strtolower(addslashes(strtolower(substr(strrchr($entry ) )))) array(ttf ttc))) {

$seccodettf[] = $ttfPath$entry;

}

}

$ttf = $seccodettf[array_rand($seccodettf)];//随机一种字体

$size = $this>type ? $this>width / : $this>width / ;//字体大小

imagettftext($this>im$size $size* $this>color $ttf $this>get_random_val());//设置验证码字符

if($this>warping){//随机扭曲

$this>setWarping();

}

if(function_exists(imagepng))

{

header (Contenttype: image/png);

$code=imagepng($this>im);

}elseif (function_exists(imagejpeg))

{

header (Contenttype: image/jpeg);

$code=imagejpeg($this>im);

}elseif (function_exists(imagegif))

{

header(Contenttype: image/gif);

$code=imagegif($this>im);

}

imagedestroy($this>im);

return $code;

}

/**

* 检查验证码

* @param $code

* @return bool

*/

public function checkCode($code) {

session_start();

$secode=explode( $_SESSION[initphp_code]);

$time=time();

//检查时间是否过期

if($secode[]>$time||$time$secode[]>$this>time)

{

return false;

}

//验证码密钥 双md 后是否一致

if($secode[]<>md(md($codeinitphpYzmsy$secode[]))){

return false;

}

//检查验证码字符串是否一致

if($code||$code<>$secode[])

{

return false;

}

return true;

}

/*随机扭曲*/

public function setWarping(){

$rgb=array();

$direct=rand();

$width = imagesx($this>im);

$height = imagesy($this>im);

$level=$width /;

for($j = ;$j < $height;$j++) {

for($i = ;$i < $width;$i++) {

$rgb[$i] = imagecolorat($this>im $i $j);

}

for($i = ;$i < $width;$i++) {

$r = sin($j / $height * * M_PI M_PI * ) * ($direct ? $level : $level);

imagesetpixel($this>im $i + $r $j $rgb[$i]);

}

}

}

}

?>

效果

               

上一篇:Facebook的PHP代码对环境的沖击

下一篇:PHP 超全局变量