麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > PHP > 正文

PHP一個(gè)簡(jiǎn)單的驗(yàn)證碼類

2020-03-22 20:27:17
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
  • 初學(xué)Php,因?yàn)楹芏嗟胤蕉忌婕暗津?yàn)證碼的功能,網(wǎng)上雖然有很多驗(yàn)證碼的例子,但是看了之后都不是很滿意。于是,自己隨便看了一下書(shū),寫(xiě)了一個(gè)簡(jiǎn)單地Php驗(yàn)證碼類,可以提供簡(jiǎn)單的生成一個(gè)驗(yàn)證碼類。當(dāng)然,這個(gè)類也是剛剛寫(xiě)好,還有很多可以改進(jìn)的地方。

    下面是代碼。

    <?php/*	2014/3/28	@程序與算法*/html' target='_blank'>class checkCode{	private $m_fontFile = "";  //儲(chǔ)存引入的字體文件路徑	private $m_fontSize = 16;  // 字體大小	private $m_str = "";  //儲(chǔ)存生成驗(yàn)證碼的字符串	private $m_width = 80; //驗(yàn)證碼圖片的寬度	private $m_heigh =  30; //驗(yàn)證碼圖片的高度	private $m_bg = array("0xff", "0xff", "0xff");  //默認(rèn)的背景顏色	private $m_tg = array("0x00", "0x00", "0x00");   //默認(rèn)的字體顏色	private $m_ig;  //圖片變量	private $m_isbg = "";	private $m_istg = "";	private $m_codearray = array();  //動(dòng)態(tài)生成驗(yàn)證碼的字符數(shù)組,這里是0-9,a-z,A-Z	private $m_codeNum = 4; //驗(yàn)證碼的長(zhǎng)度		//構(gòu)造函數(shù),可以傳入寬度和高度,也可以使用默認(rèn)的值	public function __construct($m_w = "", $m_h = "") 	{		$this->createCodeArray();  //用于生成隨機(jī)字符串		if ($m_w == "" || $m_h == "")		{			$this->m_ig = imagecreate($this->m_width, $this->m_heigh);		}		else		{			$this->m_ig = imagecreate($m_w, $m_h);			$this->m_width = $m_w;			$this->m_heigh = $m_h;		}		$this->setBgColor($this->m_bg[0], $this->m_bg[1], $this->m_bg[2]);	}	public function __destruct()	{		imagedestroy($this->m_ig);	}		public function setBgColor($m_r, $m_g, $m_b)  //設(shè)置驗(yàn)證碼的背景顏色	{		$this->m_ig = imagecreate($this->m_width, $this->m_heigh);		$this->m_isbg = imagecolorallocate($this->m_ig, $m_r, $m_g, $m_b);		return $this->m_isbg;	}	public function setTxColor($m_r, $m_g, $m_b)  //設(shè)置字體顏色	{		$this->m_istg = imagecolorallocate($this->m_ig, $m_r, $m_g, $m_b);		return $this->m_istg;	}	public function setCodeCount($m_num) //設(shè)置驗(yàn)證碼的長(zhǎng)度	{		$this->m_codeNum = $m_num;	}	// 設(shè)置驗(yàn)證碼的字符串,這個(gè)字符串可以是用戶自己設(shè)置的,也可以是由系統(tǒng)自動(dòng)生成隨機(jī)的字符串	public function setCodeStr($str)  	{		$this->m_str = $str;	}	public function setCodeFontSize($size) //設(shè)置驗(yàn)證碼字體的大小	{		$this->m_fontSize = $size;	}	public function setCodeFontFile($file) //設(shè)置字體類型,如果不調(diào)用這個(gè)函數(shù),就使用默認(rèn)的字體	{		if (file_exists($file))		{			$this->m_fontFile = $file;		}	}	public function createCodeArray()  //生成隨機(jī)字符串的數(shù)組	{		$m_aa = ord('A');		$m_AB = ord('a');		for ($m_i = 0; $m_i < 36; ++ $m_i)		{			if ($m_i >= 0 && $m_i < 10)			{				array_push($this->m_codearray, $m_i);			}			else			{				$m_temp = chr($m_aa + $m_i - 10);				array_push($this->m_codearray, $m_temp);				$m_temp = chr($m_AB + $m_i - 10);				array_push($this->m_codearray, $m_temp);			}		}	}	public function createMass()  //生成雜點(diǎn)	{		$m_line = imagecolorallocate($this->m_ig, 0xdd, 0xdd, 0xdd);		for ($m_i = 0; $m_i < ($this->m_width + $this->m_heigh) / 50; ++ $m_i)		{			$m_fx = rand(0, $this->m_width);			$m_fy = rand(0, $this->m_heigh);			$m_sx = rand(0, $this->m_width);			$m_sy = rand(0, $this->m_heigh);			imageline($this->m_ig, $m_fx, $m_fy, $m_sx, $m_sy, $m_line);		}		$m_point = imagecolorallocate($this->m_ig, 0x00, 0x00, 0x00);		for ($m_i = 0; $m_i < $this->m_width * $this->m_heigh / 50; ++ $m_i)		{			$m_fx = rand(0, $this->m_width);			$m_fy = rand(0, $this->m_heigh);			imagesetpixel($this->m_ig, $m_fx, $m_fy, $m_point);		}	}	private function deutCode()  //默認(rèn)字體生成的驗(yàn)證碼圖片	{		@$m_arrstr = str_split($this->m_str); 		//$this->createMass();		if ($this->m_str == "") 		{					for ($m_i = 0; $m_i < $this->m_codeNum; ++ $m_i)			{				$m_index = rand(0, count($this->m_codearray) - 1);				$m_tempx = ($this->m_width / $this->m_codeNum) * ($this->m_codeNum - 1) / $this->m_codeNum;				$m_w = $m_tempx * ($m_i + 1);				$m_dh = $this->m_heigh / 4;				$m_h = rand($m_dh * 0.6, $m_dh * 1.5);				imagestring($this->m_ig, $this->m_fontSize, $m_w, $m_h, $this->m_codearray[$m_index], $this->m_istg);			}		}		else		{			$m_len = count($m_arrstr);			for ($m_i = 0; $m_i < $m_len; ++ $m_i)			{				$m_tempx = ($this->m_width / $m_len) * ($m_len - 1) / $m_len;				$m_w = $m_tempx * ($m_i + 1);				$m_dh = $this->m_heigh / 4;				$m_h = rand($m_dh * 0.6, $m_dh * 1.5);				imagestring($this->m_ig, $this->m_fontSize, $m_w, $m_h, $m_arrstr[$m_i], $this->m_istg);			}		}		imagepng($this->m_ig);	}	private function chgeCode()  //新字體生成的驗(yàn)證碼圖片	{		@$m_arrstr = str_split($this->m_str);		if ($this->m_str == "")		{			for ($m_i = 0; $m_i < $this->m_codeNum; ++ $m_i)			{				$m_index = rand(0, count($this->m_codearray) - 1);				$m_tempx = ($this->m_width / $this->m_codeNum) * ($this->m_codeNum - 1) / $this->m_codeNum;				$m_w = $m_tempx * ($m_i + 1);				$m_h = $this->m_heigh / 1.2;				$m_angel = rand(0, 60);				imagefttext($this->m_ig, $this->m_fontSize, $m_angel, $m_w, $m_h, $this->m_istg, $this->m_fontFile, $this->m_codearray[$m_index]);			}		}		else		{			$m_len = count($m_arrstr);			for ($m_i = 0; $m_i < $m_len; ++ $m_i)			{				$m_tempx = ($this->m_width / $m_len) * ($m_len - 1) / $m_len;				$m_w = $m_tempx * ($m_i + 1);				$m_h = $this->m_heigh / 1.2;				$m_angel = rand(0, 45);				imagefttext($this->m_ig, $this->m_fontSize, $m_angel, $m_w, $m_h, $this->m_istg, $this->m_fontFile, $m_arrstr[$m_i]);			}		}	}	public function getCode()  //獲取驗(yàn)證碼的函數(shù),這個(gè)函數(shù)就是相當(dāng)于生成驗(yàn)證碼	{		if ($this->m_istg == "")		{			$this->setTxColor($this->m_tg[0], $this->m_tg[1], $this->m_tg[2]);		}		$this->createMass();   //這個(gè)函數(shù)下面會(huì)有說(shuō)明是一個(gè)生成隨機(jī)雜點(diǎn)的函數(shù)		if ($this->m_fontFile == "")		{			$this->deutCode();		}		else		{			$this->chgeCode();		}		imagepng($this->m_ig);	}}?>

    該類的使用方法一,這是最簡(jiǎn)單的形式。

    1. 首先引入該類

    2. 初始化,不想類傳遞任何參數(shù),全部使用默認(rèn)、

    3. 生成驗(yàn)證碼

    具體的代碼如下

    <?php include "checkCode.php";?><?php	header("Content-Type:image/png");	$m_code = new checkCode();	$m_code->getCode();?>
    方法二,通過(guò)傳遞參數(shù),生成更加漂亮的驗(yàn)證碼。(推薦使用這個(gè)方法,因?yàn)橄到y(tǒng)默認(rèn)的字體不是很清晰而且比較小)

    <?php include "checkCode.php";?><?php	header("Content-Type:image/png");	$m_code = new checkCode(100, 50); // 或者 $m_code = new checkCode(200, 50);傳遞寬度和高度	$m_code->setCodeFontFile("Arial.ttf"); //引入新的字體	$m_code->setCodeFontSize(22);  //設(shè)置字體大小	$m_code->setCodeCount(5);  //設(shè)置驗(yàn)證碼的長(zhǎng)度	//背景顏色參數(shù)為RGB的分量值, 0-255 使用十六進(jìn)制 0x00-0xff	$m_code->setBgColor(0xdd, 0xcc, 0xcc);  	$m_code->setTxColor(0x00, 0x11, 0x22);  //,字體顏色同上	$m_code->getCode();?>

    效果圖。

    在上述的介紹中,還可以使用一個(gè)函數(shù)

    public function setCodeStr($str)
    {
    $this->m_str = $str;
    }

    這個(gè)函數(shù)用于接收用戶傳進(jìn)來(lái)的字符串,比如說(shuō),$m_code->setCodeStr("12345678");

    那么生成的圖片里面的字符就是 12345678

    其實(shí),在那個(gè)生成雜點(diǎn)的函數(shù)做的不是很好,可以再次接受用戶的輸入,來(lái)生成雜點(diǎn)。可以讓用戶來(lái)選擇設(shè)置雜點(diǎn)的顏色,雜店的數(shù)量等等。。這些還是需要解決的。由于時(shí)間緊促,只能先把這個(gè)類實(shí)現(xiàn)到這個(gè)樣子了。

    PHP編程

    鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

  • 發(fā)表評(píng)論 共有條評(píng)論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 日本在线免费观看 | 国产精品麻豆一区二区三区 | 久久99精品久久久久久秒播蜜臀 | 国产99精品在线 | 国产欧美精品一区二区三区四区 | 香蕉国产在线视频 | 中文字幕在线网 | 五月婷婷第四色 | 视频一区二区国产 | 国产免费让你躁在线视频 | 午夜视频在线观 | 久久靖品 | 精品乱码久久久久 | 亚洲福利在线视频 | 欧美一级黄色片在线观看 | 中文在线观看www | 女教师~淫辱の动漫在线 | 久久国产综合视频 | 久久精品一区二区三区国产主播 | 日韩视频精品一区 | 国产黄色免费网站 | 日本在线视频免费观看 | 吾色视频| 免费一级特黄毛片视频 | 女女久久 | 国产免费www | 福利在线免费 | 国产伦精品一区二区三区在线 | 国产成人在线视频 | 国产精品久久久久久久久久久久久久久 | 中文字幕 欧美 日韩 | 毛片视频网站 | 久久国产精品影视 | www.99av| 失禁高潮抽搐喷水h | 精品国产一区二区三区久久久蜜 | 色中色综合 | 国产1区2区在线 | 日日夜av | 日韩欧美激情视频 | 国产精品午夜未成人免费观看 |