PHP編寫的圖片驗證碼類文件分享,_PHP教程
Jul 12, 2016 am 08:50 AMPHP編寫的圖片驗證碼類文件分享,
適用于自定義的驗證碼類!
<?php /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ Class Image{ private $img; public $width = 85; public $height = 25; public $code; public $code_len = 4; public $code_str = "329832983DSDSKDSLKQWEWQ2lkfDSFSDjfdsfdsjwlkfj93290KFDSKJFDSOIDSLK"; public $bg_color = '#DCDCDC'; public $font_size = 16; public $font = 'font.ttf'; public $font_color = '#000000'; //創(chuàng)建驗證碼餓字符創(chuàng) public function create_code(){ $code = ''; for( $i=0;$i<$this->code_len;$i++ ){ $code .= $this->code_str[mt_rand(0, strlen($this->code_str)-1)]; } return $this->code = $code; } //輸出圖像 public function getImage(){ $w = $this->width; $h = $this->height; $bg_color = $this->bg_color; $img = imagecreatetruecolor($w, $h); $bg_color = imagecolorallocate($img, hexdec(substr($bg_color, 1,2)), hexdec(substr($bg_color, 3,2)), hexdec(substr($bg_color, 5,2))); imagefill($img, 0, 0, $bg_color); $this->img = $img; $this->create_font(); $this->create_pix(); $this->show_code(); } //寫入驗證碼 public function create_font(){ $this->create_code(); $color = $this->font_color; $font_color = imagecolorallocate($this->img, hexdec(substr($color,1,2)), hexdec(substr($color, 3,2)), hexdec(substr($color,5,2))); $x = $this->width/$this->code_len; for( $i=0;$i<$this->code_len;$i++ ){ $txt_color = imagecolorallocate($this->img, mt_rand(0,100), mt_rand(0, 150), mt_rand(0, 200)); imagettftext($this->img, $this->font_size, mt_rand(-30, 30), $x*$i+mt_rand(3, 6), mt_rand($this->height/1.2, $this->height), $txt_color, $this->font , $this->code[$i]); //imagestring($this->img, $this->font_size, $x*$i+mt_rand(3, 6),mt_rand(0, $this->height/4) , $this->code[$i], $font_color); } $this->font_color = $font_color; } //畫干擾線 public function create_pix(){ $pix_color= $this->font_color; for($i=0;$i<100;$i++){ imagesetpixel($this->img, mt_rand(0, $this->width),mt_rand(0, $this->height), $pix_color); } for($j=0;$j<4;$j++){ imagesetthickness($this->img, mt_rand(1, 2)); imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $pix_color); } } //得到驗證碼 public function getCode(){ return strtoupper($this->code); } //輸出驗證碼 private function show_code(){ header("Content-type:image/png"); imagepng($this->img); imagedestroy($this->img); } }
我們再來看一例代碼:
生成圖片類型驗證碼,驗證碼包含數字和大寫字母,session中存放md5加密后的驗證碼
<?php /** * 圖片驗證碼類 * 生成圖片類型驗證碼,驗證碼包含數字和大寫字母,session中存放md5加密后的驗證碼 * * 使用方法: * $captcha = new Catpcha(); * $captcha->buildAndExportImage(); * * 作 者: luojing * 創(chuàng)建時間: 2013-3-27 上午11:42:12 */ class Captcha { private $width;//寬度 private $height; //高度 private $codeNum;//驗證碼字符數量 private $image;//驗證碼圖像資源 private $sessionKey;//session中保存的名字 private $captcha;//驗證碼字符串 const charWidth = 10;//單個字符寬度,根據輸出字符大小而變 /** * 創(chuàng)建驗證碼類,初始化相關參數 * @param $width 圖片寬度 * @param $height 圖片高度 * @param $codeNum 驗證碼字符數量 * @param $sessionKey session中保存的名字 */ function __construct($width = 50, $height = 20, $codeNum = 4, $sessionKey = 'captcha') { $this->width = $width; $this->height = $height; $this->codeNum = $codeNum; $this->sessionKey = $sessionKey; //保證最小高度和寬度 if($height < 20) { $this->height = 20; } if($width < ($codeNum * self::charWidth + 10)) {//左右各保留5像素空隙 $this->width = $codeNum * self::charWidth + 10; } } /** * 構造并輸出驗證碼圖片 */ public function buildAndExportImage() { $this->createImage(); $this->setDisturb(); $this->setCaptcha(); $this->exportImage(); } /** * 構造圖像,設置底色 */ private function createImage() { //創(chuàng)建圖像 $this->image = imagecreatetruecolor($this->width, $this->height); //創(chuàng)建背景色 $bg = imagecolorallocate($this->image, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255)); //填充背景色 imagefilledrectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $bg); } /** * 設置干擾元素 */ private function setDisturb() { //設置干擾點 for($i = 0; $i < 150; $i++) { $color = imagecolorallocate($this->image, mt_rand(150, 200), mt_rand(150, 200), mt_rand(150, 200)); imagesetpixel($this->image, mt_rand(5, $this->width - 10), mt_rand(5, $this->height - 3), $color); } //設置干擾線 for($i = 0; $i < 10; $i++) { $color = imagecolorallocate($this->image, mt_rand(150, 220), mt_rand(150, 220), mt_rand(150, 220)); imagearc($this->image, mt_rand(-10, $this->width), mt_rand(-10, $this->height), mt_rand(30, 300), mt_rand(20, 200), 55, 44, $color); } //創(chuàng)建邊框色 $border = imagecolorallocate($this->image, mt_rand(0, 50), mt_rand(0, 50), mt_rand(0, 50)); //畫邊框 imagerectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $border); } /** * 產生并繪制驗證碼 */ private function setCaptcha() { $str = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ'; //生成驗證碼字符 for($i = 0; $i < $this->codeNum; $i++) { $this->captcha .= $str{mt_rand(0, strlen($str) - 1)}; } //繪制驗證碼 for($i = 0; $i < strlen($this->captcha); $i++) { $color = imagecolorallocate($this->image, mt_rand(0, 200), mt_rand(0, 200), mt_rand(0, 200)); $x = floor(($this->width - 10)/$this->codeNum); $x = $x*$i + floor(($x-self::charWidth)/2) + 5; $y = mt_rand(2, $this->height - 20); imagechar($this->image, 5, $x, $y, $this->captcha{$i}, $color); } } /* * 輸出圖像,驗證碼保存到session中 */ private function exportImage() { if(imagetypes() & IMG_GIF){ header('Content-type:image/gif'); imagegif($this->image); } else if(imagetypes() & IMG_PNG){ header('Content-type:image/png'); imagepng($this->iamge); } else if(imagetypes() & IMG_JPEG) { header('Content-type:image/jpeg'); imagepng($this->iamge); } else { imagedestroy($this->image); die("Don't support image type!"); } //將驗證碼信息保存到session中,md5加密 if(!isset($_SESSION)){ session_start(); } $_SESSION[$this->sessionKey] = md5($this->captcha); imagedestroy($this->image); } function __destruct() { unset($this->width, $this->height, $this->codeNum,$this->captcha); } }
例三:
<?php class ValidationCode { private $width; private $height; private $codeNum; private $image; //圖像資源 private $disturbColorNum; private $checkCode; function __construct($width=80, $height=20, $codeNum=4){ $this->width=$width; $this->height=$height; $this->codeNum=$codeNum; $this->checkCode=$this->createCheckCode(); $number=floor($width*$height/15); if($number > 240-$codeNum){ $this->disturbColorNum= 240-$codeNum; }else{ $this->disturbColorNum=$number; } } //通過訪問該方法向瀏覽器中輸出圖像 function showImage($fontFace=""){ //第一步:創(chuàng)建圖像背景 $this->createImage(); //第二步:設置干擾元素 $this->setDisturbColor(); //第三步:向圖像中隨機畫出文本 $this->outputText($fontFace); //第四步:輸出圖像 $this->outputImage(); } //通過調用該方法獲取隨機創(chuàng)建的驗證碼字符串 function getCheckCode(){ return $this->checkCode; } private function createImage(){ //創(chuàng)建圖像資源 $this->image=imagecreatetruecolor($this->width, $this->height); //隨機背景色 $backColor=imagecolorallocate($this->image, rand(225, 255), rand(225,255), rand(225, 255)); //為背景添充顏色 imagefill($this->image, 0, 0, $backColor); //設置邊框顏色 $border=imagecolorallocate($this->image, 0, 0, 0); //畫出矩形邊框 imagerectangle($this->image, 0, 0, $this->width-1, $this->height-1, $border); } private function setDisturbColor(){ for($i=0; $i<$this->disturbColorNum; $i++){ $color=imagecolorallocate($this->image, rand(0, 255), rand(0, 255), rand(0, 255)); imagesetpixel($this->image, rand(1, $this->width-2), rand(1, $this->height-2), $color); } for($i=0; $i<10; $i++){ $color=imagecolorallocate($this->image, rand(200, 255), rand(200, 255), rand(200, 255)); imagearc($this->image, rand(-10, $this->width), rand(-10, $this->height), rand(30, 300), rand(20, 200), 55, 44, $color); } } private function createCheckCode(){ //這里主要產生隨機碼,從2開始是為了區(qū)分1和l $code="23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ"; $string=''; for($i=0; $i < $this->codeNum; $i++){ $char=$code{rand(0, strlen($code)-1)}; $string.=$char; } return $string; } private function outputText($fontFace=""){ for($i=0; $i<$this->codeNum; $i++){ $fontcolor=imagecolorallocate($this->image, rand(0, 128), rand(0, 128), rand(0, 128)); if($fontFace==""){ $fontsize=rand(3, 5); $x=floor($this->width/$this->codeNum)*$i+3; $y=rand(0, $this->height-15); imagechar($this->image,$fontsize, $x, $y, $this->checkCode{$i},$fontcolor); }else{ $fontsize=rand(12, 16); $x=floor(($this->width-8)/$this->codeNum)*$i+8; $y=rand($fontSize+5, $this->height); imagettftext($this->image,$fontsize,rand(-30, 30),$x,$y ,$fontcolor, $fontFace, $this->checkCode{$i}); } } } private function outputImage() { if(imagetypes() & IMG_GIF){ header("Content-Type:image/gif"); imagepng($this->image); }else if(imagetypes() & IMG_JPG){ header("Content-Type:image/jpeg"); imagepng($this->image); }else if(imagetypes() & IMG_PNG){ header("Content-Type:image/png"); imagepng($this->image); }else if(imagetypes() & IMG_WBMP){ header("Content-Type:image/vnd.wap.wbmp"); imagepng($this->image); }else{ die("PHP不支持圖像創(chuàng)建"); } } function __destruct(){ imagedestroy($this->image); } }
使用如下:
測試,調用驗證碼類
code.php
<?php session_start(); include "validationcode.class.php"; $code=new ValidationCode(80, 20, 4); $code->showImage(); //輸出到頁面中供 注冊或登錄使用 $_SESSION["code"]=$code->getCheckCode(); //將驗證碼保存到服務器中

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

??? ?? ??? ??? ?? JavaScript? MediareCorder API? ?? PHP ???? ???? ?????. 2. PHP? ???? ?? ??? ???? STTAPI (? : Google ?? Baidu ?? ??)? ???? ???? ?????. 3. PHP? ???? AI ??? (? : OpenAigpt)? ????. 4. ?? ?? PHP? TTSAPI (? : Baidu ?? Google ?? ??)? ???? ??? ?? ??? ?????. 5. PHP? ?? ??? ??? ??? ??? ?? ?? ??? ?????. ?? ????? PHP? ?? ???? ?? ?? ?? ??? ??? ?????.

PHP?? ?? ?? ??? ???? ?? ??? ? ???? ?? ??? ???? ?? ??? ???? ???? ????. 1. ?? ?? ??? ?? ??? URL ? ?? ??? ????. 2. UrlenCode? ???? ?? ??? ???????. 3. ? ???? ????? ?? ?? ??? ? ?? ??? ?????. 4. ???? ???? ?? ? ? ??? ??? ??? ??? ?????. 5. ??? ?? ??? ????? ?? ????? OG ??? ???? ?????. 6. XSS ??? ???? ?? ??? ??? ?????. ? ???? ??? ??? ???? ??? ?? ?? ??? ??? ???? ??? ?? ??? ?????.

AI? ??? ??? ?? ?? ? ?? ???? ????? ?? ??? ??????. 1. Baidu, Tencent API ?? ?? ?? NLP ?????? ?? ??? AI ?? ?? API? ??????. 2. PHP? ? ?? guzzle? ?? API? ???? ?? ??? ??????. 3. ?? ????? ?? ?? ??? ???? ???? ???? ??? ??? ? ????. 4. ?? ?? ? ?? ???? ?? PHP-L ? PHP_CODESNIFFER? ??????. 5. ???? ????? ???? ?? ?? ??? ?????? ??? ??????. AIAPI? ??? ? ???, ?? ??, ?? ? PHP ?? ??? ??? ???. ?? ???? PSR ??? ???, ??? ????? ????, ?? ??? ???, ????? ??? ????, X? ???????.

1. ?? ???? ??? ??? ?????? ?? ?? ??? ??, ??? ?? ???? ??? (? : ?? ???, ? ? ??), ?? ??? ?? ???? ???? ? ?? ?? ??? ??? ?? ??? ????????. 2. ?? ??? ??? ?? ? ??? ???? ?? ?? ?? ???? ?? ? ?? AUDIT ?? ??? ??? ? ????? ????? ??? ???????. 3. ?? ?? ??? ?? ??? ???????. Recaptchav3 ???? ??, ??? ?? ?? ?? ?? ??, IP ? ?? ??? ??? ??? ?? ???? ??? ?? ??? ????? ??? ???? ????? ??? ?????.

PHP? AI ??? ??? ?? ????? ??? API? ?? ?????. ??? ??? ????? ? ??? ???? ?????. API ??? ?? ?? ??? ???? ??? ??? ???? ???? ? ????. 2. ?? ?? ???? guzzle ?? curl? ???? HTTP ??? ???, JSON ??? ??? ? ???, API ? ?? ??, ??? ? ?? ??? ???? ??, ??? ?? ?? ? ? ?? ????, ??? ?? ? ?????? ?????. 3. ???? ???? ?? ???? API ??, ?? ? ??? ?? ??, ??? ?? ??, ?? ?? ? ??? ??? ??? ?????. ?? ??? ??? ??? ? ??? ???? Propt ?? ? ?? ?? ??, ??? ?? ? ?? ????, ?? ?? ?? ???? ? ??? ?? ? ???? ????? ?????.

PHP? ?????? ????? ?? ?? ?? ???? ???? ?? ???? ???? ?? ?? ???? ?????. 2. ?? ??? ???? ???? ?? ??? ?? ? ??? ??? ???? ?? API/Webhook ??? ??? ?? ???? ??? ??? ??? ??? ?????. 3. ?? ????? ?? ??, ??/???? ????, ???? ??, ???? ? ??? ?????? ????? ?? ??? ???? ???? ?? Dingtalk, SMS ?? ??? ???? ??? ?????? ???? ?? ? ??? ??? ????? ?? ??? ???? ???????.

PhpisstillRelevantinmodernenterpriseenvironments.1. Modernphp (7.xand8.x)? ??? ??, ??? ??, jitcompilation ? modernsyntax, mateitsuilableforlarge-scalepplications

MAC ?? ???? ? ??? ?? ??? ????? ?? ? ??? ????? ????. 1. ???? ???? ???? ???? ??? ?? ? ?? ????? ??? ???? ??????. 2. ????? ?? ?? ? ??? ???? ???? ?? ?? ????? ??? ???? ?????. 3. ??? ?? ??? ???? ?? ???? ?? ???? ?? ???? ?? ? ? ????. 4. ??? ????? ????? ? ?? ?? ? ??? ?? ? ??? ??????.
