首頁 後端開發 php教程 二十四橋明月夜24

二十四橋明月夜24

Jul 29, 2016 am 09:16 AM
gt image int rand

  驗證碼在表單實作越來越多了,但是用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 &mdash; 画一个单一像素</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>
登入後複製

  其他的兩個頁面,不准要修改。

  一般而言,現在就已經夠用了。但就像動漫一樣,總會有番外。

  那麼,我們來個漢字的番外吧。其實我也準備將漢字的驗證碼放到我的畢業設計裡面,雖然現在很流行滑動驗證碼,但是本人畢竟不是專門學習js的。

  而且,還可以和答辯的老師說,我們驗證碼不需要素材,連圖片也是生成的,用自己的知識裝13,也沒有設麼的。

<?<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 &mdash; 画一个单一像素</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教程有興趣的朋友有幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

華為GT3 Pro和GT4的差異是什麼? 華為GT3 Pro和GT4的差異是什麼? Dec 29, 2023 pm 02:27 PM

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

如何解決 golang 中的 'undefined: rand.Seed” 錯誤? 如何解決 golang 中的 'undefined: rand.Seed” 錯誤? Jun 25, 2023 am 08:34 AM

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

PHP中int型別轉換為位元組的方法詳解 PHP中int型別轉換為位元組的方法詳解 Mar 06, 2024 pm 06:18 PM

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

修復:截圖工具在 Windows 11 中不起作用 修復:截圖工具在 Windows 11 中不起作用 Aug 24, 2023 am 09:48 AM

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

C++程式將double類型的變數轉換為int型別 C++程式將double類型的變數轉換為int型別 Aug 25, 2023 pm 08:25 PM

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

如何免費使用Bing Image Creator 如何免費使用Bing Image Creator Feb 27, 2024 am 11:04 AM

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

小米手機image怎麼刪除 小米手機image怎麼刪除 Mar 02, 2024 pm 05:34 PM

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

int32的取值範圍是多少 int32的取值範圍是多少 Aug 11, 2023 pm 02:53 PM

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

See all articles