加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP验证码生成类完整代码

发布时间:2023-05-30 13:35:59 所属栏目:PHP教程 来源:
导读:本文章提供这款php验证码生成类灵活好用,用户可以定义各个成员 有宽、高、画布、字数、类型、画类型同时我们只要修改 $Type就可以定义生成的是纯数字,纯小写字母,大小写数字混合,有需要的朋友可参考.PHP验证码生成类

本文章提供这款php验证码生成类灵活好用,用户可以定义各个成员 有宽、高、画布、字数、类型、画类型同时我们只要修改 $Type就可以定义生成的是纯数字,纯小写字母,大小写数字混合,有需要的朋友可参考.

PHP验证码生成类完整代码如下:

<?php 

class Code{ 

// 1. 定义各个成员 有宽、高、画布、字数、类型、画类型 

private $width; //宽度 

private $height; //高度 

private $num; //验证码字数 

private $imgType; //生成图片类型 

private $Type; //字串类型 1,2,3 三个选项 1 纯数字 2 纯小写字母 3 大小写数字混合 

private $hb; //画布 

public $codestr; // 验证码字串 

public function __construct($height=20,$num=4,$imgType="jpeg",$Type=1){ 

$this->width = $num*20; 

$this->height = $height; 

$this->num = $num; 

$this->imgType = $imgType;  

$this->Type = $Type;  

$this->codestr = $this->codestr(); 

$this->zuhe(); 

// 2. 定义随机获取字符串函数 

private function codestr(){ 

switch($this->Type){ 

case 1: // 类型为1 获取1-9随机数 

$str = implode("",array_rand(range(0,9),$this->num)); 

break; 

case 2: // 类型为2 获取a-z随机小写字母 

$str = implode("",array_rand(array_flip(range(a,z)),$this->num)); 

break; 

case 3: // 类型为3 获取数字,小写字母,大写字母 混合 

for($i=0;$i<$this->num;$i++){ 

$m = rand(0,2); 

switch($m){ 

case 0: 

$o = rand(48,57); 

break; 

case 1: 

$o = rand(65,90); 

break; 

case 2: 

$o = rand(97,122); 

break;  

$str .= sprintf("%c",$o); 

break;  

return $str;  

// 3. 初始化画布图像资源 

private function Hb(){ 

$this->hb = imagecreatetruecolor($this->width,$this->height);  

// 4. 生成背景颜色 

private function Bg(){ 

return imagecolorallocate($this->hb,rand(130,250),rand(130,250),rand(130,250));  

// 5. 生成字体颜色 

private function Font(){ 

return imagecolorallocate($this->hb,rand(0,100),rand(0,100),rand(0,100));  

// 6. 填充背景颜色 

private function BgColor(){ 

imagefilledrectangle($this->hb,0,0,$this->width,$this->height,$this->Bg());  

// 7. 干扰点 

private function ganrao(){ 

$sum=floor(($this->width)*($this->height)/3); 

for($i=0;$i<$sum;$i++){ 

imagesetpixel($this->hb,rand(0,$this->width),rand(0,$this->height),$this->Bg());  

// 8. 随机直线 弧线 

private function huxian(){ 

for($i=0;$i<$this->num;$i++){ 

imageArc($this->hb,rand(0,$this->width),rand(0,$this->height),rand(0,$this->width),rand(0,$this->height),rand(0,360),rand(0,360),$this->Bg());  

}  

// 9. 写字 

private function xiezi(){ 

for($i=0;$i<$this->num;$i++){ 

$x=ceil($this->width/$this->num)*$i;  

$y=rand(1,$this->height-15); 

imagechar($this->hb,5,$x+4,$y,$this->codestr[$i],$this->Font()); 

}  

// 10. 输出 

private function OutImg(){ 

$shuchu="image".$this->imgType;  

$header="Content-type:image/".$this->imgType; 

if(function_exists($shuchu)){ 

header($header); 

$shuchu($this->hb);  

}else{ 

exit("GD库没有此类图像");  

// 11. 拼装 

private function zuhe(){ 

$this->Hb(); 

$this->BgColor(); 

$this->ganrao(); 

$this->huxian(); 

$this->xiezi(); 

$this->OutImg();  

}//开源代码Cuoxin.com 

public function getCodeStr(){ 

return $this->codestr;  

?> 

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!