二十四橋明月夜24
驗證碼在表單實作越來越多了,但是用js的寫的驗證碼,總覺得不方便,所以學習了下php實作的驗證碼。
好吧,其實是沒有事情幹,但是又不想浪費時間,所以學習了下php實作驗證碼。正所謂,技多不壓身。而且,也可以封裝成函數,以後使用的時候也是很方便的,當然現在還沒有封裝。
現在來說說簡單的純數位驗證碼吧。
如果是初學者,建議按照我代碼的註釋 //數字 一步一步來。最簡單的方法,還是把整個程式碼複製走了。
新建一個captcha.php:
<?<span>php </span><span>//</span><span>10>设置session,必须处于脚本最顶部<span>session_start</span><span>(); </span><span>$image</span> = imagecreatetruecolor(100, 30); <span>//</span><span>1>设置验证码图片大小的函数 //5>设置验证码颜色 imagecolorallocate(int im, int red, int green, int blue);</span><span>$bgcolor</span> = imagecolorallocate(<span>$image</span>,255,255,255); <span>//</span><span>#ffffff //6>区域填充 int imagefill(int im, int x, int y, int col) (x,y) 所在的区域着色,col 表示欲涂上的颜色</span> imagefill(<span>$image</span>, 0, 0, <span>$bgcolor</span><span>); </span><span>//</span><span>10>设置变量</span><span>$captcha_code</span> = ""<span>; </span><span>//</span><span>7>生成随机数字</span><span>for</span>(<span>$i</span>=0;<span>$i</span><4;<span>$i</span>++<span>){ </span><span>//</span><span>设置字体大小</span><span>$fontsize</span> = 6<span>; </span><span>//</span><span>设置字体颜色,随机颜色</span><span>$fontcolor</span> = imagecolorallocate(<span>$image</span>, <span>rand</span>(0,120),<span>rand</span>(0,120), <span>rand</span>(0,120)); <span>//</span><span>0-120深颜色 //设置数字</span><span>$fontcontent</span> = <span>rand</span>(0,9<span>); </span><span>//</span><span>10>.=连续定义变量<span>$captcha_code</span> .= <span>$fontcontent</span><span>; </span><span>//</span><span>设置坐标</span><span>$x</span> = (<span>$i</span>*100/4)+<span>rand</span>(5,10<span>); </span><span>$y</span> = <span>rand</span>(5,10<span>); imagestring(</span><span>$image</span>,<span>$fontsize</span>,<span>$x</span>,<span>$y</span>,<span>$fontcontent</span>,<span>$fontcolor</span><span>); } </span><span>//</span><span>10>存到session</span><span>$_SESSION</span>['authcode'] = <span>$captcha_code</span><span>; </span><span>//</span><span>8>增加干扰元素,设置雪花点</span><span>for</span>(<span>$i</span>=0;<span>$i</span><200;<span>$i</span>++<span>){ </span><span>//</span><span>设置点的颜色,50-200颜色比数字浅,不干扰阅读</span><span>$pointcolor</span> = imagecolorallocate(<span>$image</span>,<span>rand</span>(50,200), <span>rand</span>(50,200), <span>rand</span>(50,200<span>)); </span><span>//</span><span>imagesetpixel — 画一个单一像素</span> imagesetpixel(<span>$image</span>, <span>rand</span>(1,99), <span>rand</span>(1,29), <span>$pointcolor</span><span>); } </span><span>//</span><span>9>增加干扰元素,设置横线<span>for</span>(<span>$i</span>=0;<span>$i</span><4;<span>$i</span>++<span>){ </span><span>//</span><span>设置线的颜色</span><span>$linecolor</span> = imagecolorallocate(<span>$image</span>,<span>rand</span>(80,220), <span>rand</span>(80,220),<span>rand</span>(80,220<span>)); </span><span>//</span><span>设置线,两点一线</span> imageline(<span>$image</span>,<span>rand</span>(1,99), <span>rand</span>(1,29),<span>rand</span>(1,99), <span>rand</span>(1,29),<span>$linecolor</span><span>); } </span><span>//</span><span>2>设置头部,image/png<span>header</span>('Content-Type: image/png'<span>); </span><span>//</span><span>3>imagepng() 建立png图形函数</span> imagepng(<span>$image</span><span>); </span><span>//</span><span>4>imagedestroy() 结束图形函数 销毁$image</span> imagedestroy(<span>$image</span>);
〜接住頁提交的表單是到form. php的,所以還要有一個判斷的form.php程式碼:
<span><!</span><span>doctype html</span><span>></span><span><</span><span>html</span><span>></span><span><</span><span>head</span><span>></span><span><</span><span>meta </span><span>http-equiv</span><span>="Content-Type"</span><span> content</span><span>="text/html; charset=UTF-8"</span><span>></span><span><</span><span>title</span><span>></span>确认验证码<span></</span><span>title</span><span>></span><span></</span><span>head</span><span>></span><span><</span><span>body</span><span>></span><span><</span><span>form </span><span>method</span><span>="post"</span><span> action</span><span>="./form.php"</span><span>></span><span><</span><span>p</span><span>></span>验证码: <span><</span><span>img </span><span>id</span><span>="captcha_img"</span><span> border</span><span>='1' </span><span>src</span><span>='./captcha.php?r=<?php </span><span>echo rand(); ?</span><span>></span><span>' /> </span><span><</span><span>a </span><span>href</span><span>="javascript:void(0)"</span><span> onclick</span><span>="document.getElementById('captcha_img').src='./captcha.php?r='+Math.random()"</span><span>></span>换一个?<span></</span><span>a</span><span>></span><span></</span><span>p</span><span>></span><span><</span><span>P</span><span>></span>请输入验证码:<span><</span><span>input </span><span>type</span><span>="text"</span><span> name</span><span>='authcode' </span><span>value</span><span>=''</span><span>/></</span><span>p</span><span>></span><span><</span><span>p</span><span>><</span><span>input </span><span>type</span><span>='submit' </span><span>value</span><span>='提交' </span><span>style</span><span>='padding:6px </span><span>5px;'</span><span>/></</span><span>p</span><span>></span><span></</span><span>body</span><span>></span><span></</span><span>html</span><span>></span>
顯示頁如下:
那麼,純數字的實現了,數字加英文的英文也應該不難了。要修改的程式碼 只是在captcha.php
將//7>產生隨機數字 修改成 //7>產生隨機的字母和數字,如果你真的很可愛的數字就修改這幾個字就認為可以實現的話,那麼恭喜你,你永遠保持快樂。腦殘兒童歡樂多。
廢話不多說了,拉代碼吧。
<?<span>php
</span><span>header</span>("Content-Type:text/html;charset=utf-8"); <span>//</span><span>设置头部信息
//isset()检测变量是否设置</span><span>if</span>(<span>isset</span>(<span>$_REQUEST</span>['authcode'<span>])){
</span><span>session_start</span><span>();
</span><span>//</span><span>strtolower()小写函数</span><span>if</span>(<span>strtolower</span>(<span>$_REQUEST</span>['authcode'])== <span>$_SESSION</span>['authcode'<span>]){
</span><span>//</span><span>跳转页面</span><span>echo</span> "<script language=\"javascript\">"<span>;
</span><span>echo</span> "document.location=\"./form.php\""<span>;
</span><span>echo</span> "</script>"<span>;
}</span><span>else</span><span>{
</span><span>//</span><span>提示以及跳转页面</span><span>echo</span> "<script language=\"javascript\">"<span>;
</span><span>echo</span> "alert('输入错误!');"<span>;
</span><span>echo</span> "document.location=\"./form.php\""<span>;
</span><span>echo</span> "</script>"<span>;
}
</span><span>exit</span><span>();
}</span>
一般而言,現在就已經夠用了。但就像動漫一樣,總會有番外。
<?<span>php </span><span>//</span><span>10>设置session,必须处于脚本最顶部<span>session_start</span><span>(); </span><span>$image</span> = imagecreatetruecolor(100, 30); <span>//</span><span>1>设置验证码图片大小的函数 //5>设置验证码颜色 imagecolorallocate(int im, int red, int green, int blue);</span><span>$bgcolor</span> = imagecolorallocate(<span>$image</span>,255,255,255); <span>//</span><span>#ffffff //6>区域填充 int imagefill(int im, int x, int y, int col) (x,y) 所在的区域着色,col 表示欲涂上的颜色</span> imagefill(<span>$image</span>, 0, 0, <span>$bgcolor</span><span>); </span><span>//</span><span>10>设置变量</span><span>$captcha_code</span> = ""<span>; </span><span>//</span><span>7>生成随机的字母和数字</span><span>for</span>(<span>$i</span>=0;<span>$i</span><4;<span>$i</span>++<span>){ </span><span>//</span><span>设置字体大小</span><span>$fontsize</span> = 8<span>; </span><span>//</span><span>设置字体颜色,随机颜色</span><span>$fontcolor</span> = imagecolorallocate(<span>$image</span>, <span>rand</span>(0,120),<span>rand</span>(0,120), <span>rand</span>(0,120)); <span>//</span><span>0-120深颜色 //设置需要随机取的值,去掉容易出错的值如0和o</span><span>$data</span> ='abcdefghigkmnpqrstuvwxy3456789'<span>; </span><span>//</span><span>取出值,字符串截取方法 strlen获取字符串长度</span><span>$fontcontent</span> = <span>substr</span>(<span>$data</span>, <span>rand</span>(0,<span>strlen</span>(<span>$data</span>)),1<span>); </span><span>//</span><span>10>.=连续定义变量<span>$captcha_code</span> .= <span>$fontcontent</span><span>; </span><span>//</span><span>设置坐标</span><span>$x</span> = (<span>$i</span>*100/4)+<span>rand</span>(5,10<span>); </span><span>$y</span> = <span>rand</span>(5,10<span>); imagestring(</span><span>$image</span>,<span>$fontsize</span>,<span>$x</span>,<span>$y</span>,<span>$fontcontent</span>,<span>$fontcolor</span><span>); } </span><span>//</span><span>10>存到session</span><span>$_SESSION</span>['authcode'] = <span>$captcha_code</span><span>; </span><span>//</span><span>8>增加干扰元素,设置雪花点</span><span>for</span>(<span>$i</span>=0;<span>$i</span><200;<span>$i</span>++<span>){ </span><span>//</span><span>设置点的颜色,50-200颜色比数字浅,不干扰阅读</span><span>$pointcolor</span> = imagecolorallocate(<span>$image</span>,<span>rand</span>(50,200), <span>rand</span>(50,200), <span>rand</span>(50,200<span>)); </span><span>//</span><span>imagesetpixel — 画一个单一像素</span> imagesetpixel(<span>$image</span>, <span>rand</span>(1,99), <span>rand</span>(1,29), <span>$pointcolor</span><span>); } </span><span>//</span><span>9>增加干扰元素,设置横线<span>for</span>(<span>$i</span>=0;<span>$i</span><4;<span>$i</span>++<span>){ </span><span>//</span><span>设置线的颜色</span><span>$linecolor</span> = imagecolorallocate(<span>$image</span>,<span>rand</span>(80,220), <span>rand</span>(80,220),<span>rand</span>(80,220<span>)); </span><span>//</span><span>设置线,两点一线</span> imageline(<span>$image</span>,<span>rand</span>(1,99), <span>rand</span>(1,29),<span>rand</span>(1,99), <span>rand</span>(1,29),<span>$linecolor</span><span>); } </span><span>//</span><span>2>设置头部,image/png<span>header</span>('Content-Type: image/png'<span>); </span><span>//</span><span>3>imagepng() 建立png图形函数</span> imagepng(<span>$image</span><span>); </span><span>//</span><span>4>imagedestroy() 结束图形函数 销毁$image</span> imagedestroy(<span>$image</span>);
以上就介紹了二十四橋明月夜24,包括了方面的內容,希望對PHP教程有興趣的朋友有幫助。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

許多用戶在選擇智慧型手錶的時候都會選擇的華為的品牌,其中華為GT3pro和GT4都是非常熱門的選擇,不少用戶都很好奇華為GT3pro和GT4有什麼區別,下面就給大家介紹一下二者。華為GT3pro和GT4有什麼差別一、外觀GT4:46mm和41mm,材質是玻璃鏡板+不鏽鋼機身+高分纖維後殼。 GT3pro:46.6mm和42.9mm,材質是藍寶石玻璃鏡+鈦金屬機身/陶瓷機身+陶瓷後殼二、健康GT4:採用最新的華為Truseen5.5+演算法,結果會更加的精準。 GT3pro:多了ECG心電圖和血管及安

在使用Golang進行開發或學習過程中,我們可能會遇到undefined:rand.Seed的錯誤提示。這個錯誤通常會在需要使用隨機數產生器時出現,因為在Golang中需要先設定一個隨機數種子,才能使用rand套件中的函數。本篇文章將介紹如何解決這種錯誤。 1.引入math/rand包首先,我們需要在程式碼中引入math/rand包。在

PHP中int類型轉換為位元組的方法詳解在PHP中,我們經常需要將整數類型(int)轉換為位元組(Byte)類型,例如在處理網路資料傳輸、檔案處理或加密演算法等場景中。本文將詳細介紹如何將int類型轉換為位元組類型,以及提供具體的程式碼範例。 1.int型別與位元組的關係在電腦領域,基本資料型別int表示整數,而位元組(Byte)是電腦儲存單位,通常是8位元二進位數據

為什麼截圖工具在Windows11上不起作用了解問題的根本原因有助於找到正確的解決方案。以下是截圖工具可能無法正常工作的主要原因:對焦助手已開啟:這可以防止截圖工具開啟。應用程式損壞:如果截圖工具在啟動時崩潰,則可能已損壞。過時的圖形驅動程式:不相容的驅動程式可能會幹擾截圖工具。來自其他應用程式的干擾:其他正在運行的應用程式可能與截圖工具衝突。憑證已過期:升級過程中的錯誤可能會導致此issu簡單的解決方案這些適合大多數用戶,不需要任何特殊的技術知識。 1.更新視窗與Microsoft應用程式商店應用程

在C++中,int型別的變數只能保存正整數或負整數值;它們不能保存小數值。有float和double值可用於此目的。為了儲存小數點後最多七位的小數,創建了雙精度資料類型。整數到雙精確度資料類型的轉換可以由編譯器自動完成(稱為「隱式」轉換),也可以由程式設計師向編譯器明確要求(稱為「明確」轉換)。在接下來的部分中,我們將介紹各種轉換方法。隱式轉換編譯器會自動執行隱式類型轉換。要實現這一點,需要兩個變數——一個是浮點類型,另一個是整數類型。當我們簡單地將浮點值或變數分配給整數變數時,編譯器將處理所有其他事情

本文將介紹七種利用免費的BingImageCreator獲得高品質輸出的方法。 BingImageCreator(現稱為MicrosoftDesigner的ImageCreator)是一個出色的線上人工智慧藝術生成器之一。它能根據使用者的提示產生高度逼真的視覺效果。提示越具體、清晰和創意,生成的效果也會更出色。 BingImageCreator在創建高品質影像方面取得了重大進展。現在它使用Dall-E3訓練模式,顯示出更高水準的細節和現實主義。然而,它能否始終如一地產生高清結果取決於幾個因素,包括快速

小米手機image怎麼刪除?在小米手機中是可以刪除image,但是多數的用戶不知道image如何的刪除,接下來就是小編為用戶帶來的小米手機image刪除方法教程,感興趣的用戶快來一起看看吧!小米手機image怎麼刪除1、先打開小米手機中的【相簿】功能;2、然後勾選不需要的圖片,點擊右下角的【刪除】按鈕;3、之後點擊最頂部的【相簿】進入到專區,選擇【回收站】;4、接著直接點選下圖所示的【清空回收站】;5、最後直接點選【永久刪除】即可完成。

int32的取值範圍是從-2的31次方到2的31次方減1,即-2147483648到2147483647。 int32是有符號的整數型,表示它可以表示正數、負數和零,它使用1位來表示符號位,而剩餘的31位元用來表示數值。由於一位用來表示符號位,所以int32的有效位數是31位元。
