PHP 繪制網(wǎng)站登錄首頁圖片驗(yàn)證碼
幾乎所有的網(wǎng)站登錄頁都會(huì)有驗(yàn)證碼,驗(yàn)證碼是一種安全保護(hù)機(jī)制,在注冊時(shí)要求必須有人工操作進(jìn)行驗(yàn)證,用于防止垃圾注冊機(jī)大量注冊用戶賬號占用服務(wù)器內(nèi)存從而使服務(wù)器癱瘓。
圖片驗(yàn)證碼的實(shí)現(xiàn)十分簡單。首先從指定字符集合中隨機(jī)抽取固定數(shù)目的字符,以一種不規(guī)則的方法畫在畫布上,再適當(dāng)添加一些干擾點(diǎn)和干擾元素,最后將圖片輸出,一張嶄新的驗(yàn)證碼就完成了。
先給大家展示下生成的驗(yàn)證碼:
點(diǎn)擊刷新:
如果大家對實(shí)現(xiàn)效果非常滿意,請繼續(xù)往下看。
前端代碼如下:
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>This is a test!</title> <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"> </head> <body> <form name="form"> <input type="text" placeholder="賬號"/><br/> <input type="password" placeholder="密碼"/><br/> <input type="text" placeholder="驗(yàn)證碼"/> <img id="verImg" src="libs/verification.php"/> <a href="#" class="change" onclick="changeVer()">點(diǎn)擊刷新</a><br/> <input type="submit" value="登錄"/> </form> <script type="text/javascript"> //刷新驗(yàn)證碼 function changeVer(){ document.getElementById("verImg").src="libs/verification.php?tmp="+Math.random(); } </script> </body> </html>
php腳本文件驗(yàn)證碼的代碼如下:
<?php session_start(); //開啟session記錄驗(yàn)證碼數(shù)據(jù) vCode(4, 15);//設(shè)置驗(yàn)證碼的字符個(gè)數(shù)和圖片基礎(chǔ)寬度 //vCode 字符數(shù)目,字體大小,圖片寬度、高度 function vCode($num = 4, $size = 20, $width = 0, $height = 0) { !$width && $width = $num * $size * 4 / 5 + 15; !$height && $height = $size + 10; //設(shè)置驗(yàn)證碼字符集合 $str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVW"; //保存獲取的驗(yàn)證碼 $code = ''; //隨機(jī)選取字符 for ($i = 0; $i < $num; $i++) { $code .= $str[mt_rand(0, strlen($str)-1)]; } //創(chuàng)建驗(yàn)證碼畫布 $im = imagecreatetruecolor($width, $height); //背景色 $back_color = imagecolorallocate($im, mt_rand(0,100),mt_rand(0,100), mt_rand(0,100)); //文本色 $text_color = imagecolorallocate($im, mt_rand(100, 255), mt_rand(100, 255), mt_rand(100, 255)); imagefilledrectangle($im, 0, 0, $width, $height, $back_color); // 畫干擾線 for($i = 0;$i < 5;$i++) { $font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); imagearc($im, mt_rand(- $width, $width), mt_rand(- $height, $height), mt_rand(30, $width * 2), mt_rand(20, $height * 2), mt_rand(0, 360), mt_rand(0, 360), $font_color); } // 畫干擾點(diǎn) for($i = 0;$i < 50;$i++) { $font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $font_color); } //隨機(jī)旋轉(zhuǎn)角度數(shù)組 $array=array(5,4,3,2,1,0,-1,-2,-3,-4,-5); // 輸出驗(yàn)證碼 // imagefttext(image, size, angle, x, y, color, fontfile, text) @imagefttext($im, $size , array_rand($array), 12, $size + 6, $text_color, 'c:\WINDOWS\Fonts\simsun.ttc', $code); $_SESSION["VerifyCode"]=$code; //no-cache在每次請求時(shí)都會(huì)訪問服務(wù)器 //max-age在請求1s后再次請求會(huì)再次訪問服務(wù)器,must-revalidate則第一發(fā)送請求會(huì)訪問服務(wù)器,之后不會(huì)再訪問服務(wù)器 // header("Cache-Control: max-age=1, s-maxage=1, no-cache, must-revalidate"); header("Cache-Control: no-cache"); header("Content-type: image/png;charset=gb2312"); //將圖片轉(zhuǎn)化為png格式 imagepng($im); imagedestroy($im); } ?>
好了,關(guān)于小編給大家介紹的php繪制圖片驗(yàn)證就給大家介紹這么多,希望對大家有所幫助!
- 如何打開php的gd2庫
- 基于GD2圖形庫的PHP生成圖片縮略圖類代碼分享
- php gd2 上傳圖片/文字水印/圖片水印/等比例縮略圖/實(shí)現(xiàn)代碼
- 詳細(xì)的Mysql安裝 圖解win2003+iis6+php+gd2+mysql安裝配置
- PHP中使用GD庫繪制折線圖 折線統(tǒng)計(jì)圖的繪制方法
- PHP中繪制圖像的一些函數(shù)總結(jié)
- PHP中創(chuàng)建圖像并繪制文字的例子
- PHP實(shí)現(xiàn)繪制3D扇形統(tǒng)計(jì)圖及圖片縮放實(shí)例
- 如何使用php繪制在圖片上的正余弦曲線
- 利用php繪制餅狀圖的實(shí)現(xiàn)代碼
- php GD繪制24小時(shí)柱狀圖
- php使用GD2繪制幾何圖形示例
相關(guān)文章
destoon利用Rewrite規(guī)則設(shè)置網(wǎng)站安全
這篇文章主要介紹了destoon利用Rewrite規(guī)則設(shè)置網(wǎng)站安全,需要的朋友可以參考下2014-06-06彈出模態(tài)框modal的實(shí)現(xiàn)方法及實(shí)例
這篇文章主要介紹了彈出模態(tài)框modal的實(shí)現(xiàn)方法及實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09ThinkPHP3.1數(shù)據(jù)CURD操作快速入門
這篇文章主要介紹了ThinkPHP3.1的CURD操作,需要的朋友可以參考下2014-06-06PHP將amr音頻文件轉(zhuǎn)換為mp3格式的操作細(xì)節(jié)
本文以centos服務(wù)器安裝ffmpeg為例,給大家詳細(xì)介紹PHP將amr音頻文件轉(zhuǎn)換為mp3格式的操作細(xì)節(jié),感興趣的朋友跟隨小編一起看看吧2021-07-07php+jQuery.uploadify實(shí)現(xiàn)文件上傳教程
這篇文章主要介紹了php+jQuery.uploadify實(shí)現(xiàn)文件上傳教程,需要的朋友可以參考下2014-12-12