php 验证码
學(xué)習(xí)地址:http://www.imooc.com/video/2458
<?php /*** 生成驗證碼* @param int $type* @param int $length* @return string*/ function buildRandomString($type=1,$length=4){if ($type == 1) {$chars = join ( "", range ( 0, 9 ) );} elseif ($type == 2) {$chars = join ( "", array_merge ( range ( "a", "z" ), range ( "A", "Z" ) ) );} elseif ($type == 3) {$chars = join ( "", array_merge ( range ( "a", "z" ), range ( "A", "Z" ), range ( 0, 9 ) ) );}if ($length > strlen ( $chars )) {exit ( "字符串長度不夠" );}$chars = str_shuffle ( $chars );return substr ( $chars, 0, $length ); }//通過GD庫做驗證碼 function verifyImage($type=1,$length=4,$pixel=0,$line=0,$sess_name = "verify"){session_start();//創(chuàng)建畫布$width = 80;$height = 28;$image = imagecreatetruecolor ( $width, $height );$white = imagecolorallocate ( $image, 255, 255, 255 );$black = imagecolorallocate ( $image, 0, 0, 0 );//用填充矩形填充畫布imagefilledrectangle ( $image, 1, 1, $width - 2, $height - 2, $white );$chars = buildRandomString ( $type, $length );$_SESSION [$sess_name] = $chars;//$fontfiles = array ("MSYH.TTF", "MSYHBD.TTF", "SIMLI.TTF", "SIMSUN.TTC", "SIMYOU.TTF", "STZHONGS.TTF" );$fontfiles = array ("SIMYOU.TTF" );//由于字體文件比較大,就只保留一個字體,如果有需要的同學(xué)可以自己添加字體,字體在你的電腦中的fonts文件夾里有,直接運(yùn)行輸入fonts就能看到相應(yīng)字體for($i = 0; $i < $length; $i ++) {$size = mt_rand ( 14, 18 );$angle = mt_rand ( - 15, 15 );$x = 5 + $i * $size;$y = mt_rand ( 20, 26 );$fontfile = "../fonts/" . $fontfiles [mt_rand ( 0, count ( $fontfiles ) - 1 )];$color = imagecolorallocate ( $image, mt_rand ( 50, 90 ), mt_rand ( 80, 200 ), mt_rand ( 90, 180 ) );$text = substr ( $chars, $i, 1 );imagettftext($image, $size, $angle, $x, $y, $color, "", $text);}if ($pixel) {for($i = 0; $i < 50; $i ++) {imagesetpixel ( $image, mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), $black );}}if ($line) {for($i = 1; $i < $line; $i ++) {$color = imagecolorallocate ( $image, mt_rand ( 50, 90 ), mt_rand ( 80, 200 ), mt_rand ( 90, 180 ) );imageline ( $image, mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), $color );}}header ( "content-type:image/gif" );imagegif ( $image );imagedestroy ( $image ); }?
網(wǎng)上找到的不錯的驗證碼:http://www.jb51.net/article/40341.htm
需要下載字體:elephant.ttf
html使用:<img? title="點(diǎn)擊刷新" src="./captcha.php" align="absbottom" οnclick="this.src='captcha.php?'+Math.random();"></img>
<?php session_start(); //驗證碼類 class ValidateCode {private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//隨機(jī)因子private $code;//驗證碼private $codelen = 4;//驗證碼長度private $width = 130;//寬度private $height = 50;//高度private $img;//圖形資源句柄private $font;//指定的字體private $fontsize = 20;//指定字體大小private $fontcolor;//指定字體顏色//構(gòu)造方法初始化public function __construct() {$this->font = dirname(__FILE__).'/font/elephant.ttf';//注意字體路徑要寫對,否則顯示不了圖片 }//生成隨機(jī)碼private function createCode() {$_len = strlen($this->charset)-1;for ($i=0;$i<$this->codelen;$i++) {$this->code .= $this->charset[mt_rand(0,$_len)];}}//生成背景private function createBg() {$this->img = imagecreatetruecolor($this->width, $this->height);$color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);}//生成文字private function createFont() {$_x = $this->width / $this->codelen;for ($i=0;$i<$this->codelen;$i++) {$this->fontcolor = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));imagettftext($this->img,$this->fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->height / 1.4,$this->fontcolor,$this->font,$this->code[$i]);}}//生成線條、雪花private function createLine() {//線條for ($i=0;$i<6;$i++) {$color = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);}//雪花for ($i=0;$i<100;$i++) {$color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);}}//輸出private function outPut() {header('Content-type:image/png');imagepng($this->img);imagedestroy($this->img);}//對外生成public function doimg() {$this->createBg();$this->createCode();$this->createLine();$this->createFont();$this->outPut();}//獲取驗證碼public function getCode() {return strtolower($this->code);} }//使用方法,通常是在另一個單獨(dú)的php頁面執(zhí)行的: /* $_vc = new ValidateCode(); $_vc->doimg(); $_SESSION['ValidateCode'] = $_vc->getCode();//驗證碼保存到SESSION中 */ //然后在html中引用php頁面: /* <img title="點(diǎn)擊刷新" src="./captcha.php" align="absbottom" οnclick="this.src='captcha.php?'+Math.random();"></img> */?>?
轉(zhuǎn)載于:https://www.cnblogs.com/CyLee/p/5725518.html
總結(jié)
- 上一篇: 设计模式-由浅到深的单例模式
- 下一篇: PHP 验证码 高洛峰 细说PHP