public function yzm(){ // 創建驗證碼 $w = 120; $h = 50; // 1.創建畫布 $im = imagecreatetruecolor($w, $h); // 2.繪制顏色 $white = imagecolorallocate($im, 255, 255, 255); $rand_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); // 3.填充背景 默認是黑色 imagefill($im, 0, 0, $white); // 4.繪制驗證碼 putenv('GDFONTPATH=' . realpath('.')); $font = './simsun.ttc';//字體文件 $x = 11; $word = ""; for ($i = 0; $i < 4; $i++) { $f = 30; $rand_num = mt_rand(0, 9); $word .= $rand_num; $rand_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); imagettftext($im, 20, mt_rand(-20, 20), $f * $i + $x, 30, $rand_color, $font, $rand_num); } // 把驗證碼存入session Session::put('yzm',$word); // 5.頁面輸出 header("content-type:image/png"); imagepng($im); //銷毀圖片 imagedestroy($im); }
<?php function yzm($type=1,$length=1){ switch ($type){ case 1://數字 $arr = str_shuffle(implode(range(0,9))); return substr($arr,0,$length); case 2://數字+字母 $arr = array_merge(range(0,9),range('a','z'),range('A','Z')); $arr = str_shuffle(implode($arr)); return substr($arr,0,$length); case 3://字母 $arr = array_merge(range('a','z'),range('A','Z')); $arr = str_shuffle(implode($arr)); return substr($arr,0,$length); } } $brr= yzm(3,4); return $brr; class Code { // 驗證碼個數$number protected $number; // 驗證碼類型$codeType protected $codeType; // 驗證碼圖像寬度$width protected $width; // 驗證碼$height protected $height; // 驗證碼字符串$code protected $code; // 圖像資源$image protected $image; public function __construct($number = 4, $codeType = 0, $height = 50, $width = 100) { //初始化自己的成員屬性 $this->number = $number; $this->codeType = $codeType; $this->width = $width; $this->height = $height; //生成驗證碼函數 $this->code = $this->createCode(); } public function __get($name) { if ($name == 'code') { return $this->code; } return false; } /*獲取驗證碼*/ public function getCode() { return $this->code; } /*圖像資源銷毀*/ public function __destruct() { imagedestroy($this->image); } protected function createCode() { //通過你的驗證碼類型生成驗證碼 switch ($this->codeType) { case 0: //純數字 $code = $this->getNumberCode(); break; case 1: //純字母的 $code = $this->getCharCode(); break; case 2: //數字和字母混合 $code = $this->getNumCharCode(); break; default: die('不支持此類驗證碼類型'); } return $code; } protected function getNumberCode() { $str = join('', range(0, 9)); return substr(str_shuffle($str), 0, $this->number); } protected function getCharCode() { $str = join('', range('a', 'z')); $str = $str . strtoupper($str); return substr(str_shuffle($str), 0, $this->number); } protected function getNumCharCode() { $numstr = join('', range(0, 9)); $str = join('', range('a', 'z')); $str = $numstr . $str . strtoupper($str); return substr(str_shuffle($str), 0, $this->number); } protected function createImage() { $this->image = imagecreatetruecolor($this->width, $this->height); } protected function fillBack() { imagefill($this->image, 0, 0, $this->lightColor()); } /*淺色*/ protected function lightColor() { return imagecolorallocate($this->image, mt_rand(133, 255), mt_rand(133, 255), mt_rand(133, 255)); } /*深色*/ protected function darkColor() { return imagecolorallocate($this->image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120)); } protected function drawChar() { $width = ceil($this->width / $this->number); for ($i = 0; $i < $this->number; $i++) { $x = mt_rand($i * $width + 5, ($i + 1) * $width - 10); $y = mt_rand(0, $this->height - 15); imagechar($this->image, 5, $x, $y, $this->code[$i], $this->darkColor()); } } protected function drawLine() { for ($i = 0; $i < 5; $i++) { imageline($this->image, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $this->darkColor()); } } protected function drawDisturb() { for ($i = 0; $i < 150; $i++) { $x = mt_rand(0, $this->width); $y = mt_rand(0, $this->height); imagesetpixel($this->image, $x, $y, $this->lightColor()); } } protected function show() { header('Content-Type:image/png'); imagepng($this->image); } public function outImage() { // 創建畫布 $this->createImage(); // 填充背景色 $this->fillBack(); // 將驗證碼字符串花到畫布上 $this->drawChar(); // 添加干擾元素 $this->drawDisturb(); // 添加線條 $this->drawLine(); // 輸出並顯示 $this->show(); } }