php验证码两种方法
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(); } }