黑馬程式設計師:PHP程式設計師必看之實現帶算術運算的驗證碼(含代碼)

2020-12-12 黑馬程式設計師

思路:大多數網站中的算術驗證碼都是整數形式的,所以我們的運算公式是這樣的

加數 + 加數,被減數 - 減數,被乘數 * 乘數 無非這3種公式。類似A 【+、-、*】 B

所以第一步:我們要封裝一個php函數是生成 類似A 【+、-、*】 B 的驗證碼,第二步:因為我們需要獲取用戶輸入的結果進行驗證碼判斷是否輸入正確,所以在我們生成驗證碼的同時要記錄下運算結果到伺服器中(此處存入session),第三步用戶提交驗證碼與我們存入session中的運算結果進行匹配驗證。

核心PHP代碼:

<?php/*** @param int $width 寬度,默認為100 * @param int $height 高度,默認為50 * @param int $fontSize 字體的大小 默認20 * @return 圖片資源 */function getCaptche($width=120,$height=50,$fontSize=20){ // 開啟session session_start(); // 創建畫布 $img = imagecreatetruecolor($width,$height); // 分配顏色 $color = imagecolorallocate($img,255,255,255); // 填充顏色 imagefill($img,0,0,$color); // 幹擾點 for ($i = 0;$i < 500;$i++){ $pixColor = imagecolorallocate($img,mt_rand(100,200),mt_rand(100,200),mt_rand(100,200)); imagesetpixel($img,mt_rand(0,$width),mt_rand(0,$height),$pixColor); } // 幹擾線 for ($i = 0;$i < 4;$i++){ $lineColor = imagecolorallocate($img,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120)); imageline($img,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),$lineColor); } // 定義一個數組存放運算符號 $arr = ['+','-','*']; // 計算數組的長度 $len = count($arr); // 定義一個1到20的數組 $num = range(1,20); $numLen = count($num); // 定義一個空數組來存放隨機取得的驗證碼 $code = []; for ($i = 0;$i < $len;$i++) { if ($i == 1) { $code[] = $arr[mt_rand(0,$len-1)]; }else { $code[] = $num[mt_rand(0,$numLen-1)]; } } $str = implode($code);// 將數組轉為字符串 $textColor = imagecolorallocate($img,mt_rand(100,200),mt_rand(100,200),mt_rand(100,200)); $fontAngle = 0; $x = ($width - $fontSize*3)/2; $y = ($height - $fontSize) / 2 + $fontSize; // 字體路徑 $font = '/img/inkfree.ttf'; imagettftext($img,$fontSize,$fontAngle,$x,$y,$textColor,$font,$str); $res = getRes($code); // 將函數存放在session中 $_SESSION['res'] = $res; // 輸出圖片 header("content-type:image/png"); imagepng($img);}/** * @param $arr 一個包含運算符號的數組 * @return 返回一個運算結果 */function getRes($arr) { $res = 0; // 判斷數組元素下標為1的運算符號是什麼 switch ($arr[1]){ case '+': $res = $arr[0] + $arr[2]; break; case '-': $sum = $arr[0] - $arr[2]; break; case '*': $res = $arr[0] * $arr[2]; break; } return $res;}$width = 120;$height = 50;$fontSize = 20;//調用函數getCaptche($width,$height,$fontSize);

核心模板代碼:

<!doctype html><html><head><meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>帶運算的驗證碼</title> <style> img { position: relative; top: 20px; } </style></head><body><form action="index.php"> 驗證碼 <input type="text" name="captche"> <img src="./captche.php" alt="點擊刷新"> <br> <button>提交</button></form></body></html><script> // 實現點擊圖片刷新驗證碼 var img = document.querySelector("img"); img.onclick = function () { this.src = this.src+"?m="+Math.random(); }</script>

效果圖如下:

相關焦點

  • 2019年最新PHP經典面試題及答案,PHP程式設計師必看
    源 / php中文網      源 / www.php.cn2019年最新PHP經典面試題及答案,PHP程式設計師必看.1、用最少的代碼寫一個求3值最大值的函數.例如2018-2-5 ~ 2019-3-6 的日期差數$date1 = strtotime('2019-03-06');$date2 = strtotime('2018-02-05');echo ($date1-$date2)/(24*3600);3、函數實現
  • 關於PHP程式設計師解決問題的能力
    Lv0 查看PHP錯誤信息  程序沒有達到預期效果,證明代碼出錯了,看PHP的錯誤信息是第一步。如果直接忽略錯誤信息,表明這個人不適合擔任專業的程式設計師崗位。有些情況下php.ini配置中關閉了錯誤顯示,需要修改php.ini打開錯誤信息,或者錯誤信息被導出到了日誌文件,這種情況可以直接tailf php_error.log來看錯誤信息。  拿到錯誤信息後直接定位到程序代碼問題,或者到Google/百度搜索,即可解決問題。
  • 為什麼程式設計師都黑php? PHP中文網有話說!
    為什麼程式設計師都喜歡黑php?這個嘛!你罵一句php是垃圾試試,保準php程式設計師不揍扁你!這就好像自己的母校,縱然有很多不好的地方,但是只允許自己調侃,不允許外人罵半句。沒有最好的語言,只有最好的程式設計師,詳看:為什麼創立php中文網之一個程式設計師的成長故事!以下是摘取的一些專業人士對PHP語言的看法:1. 被黑沒所謂的,關鍵是PHP能快速解決絕大部分問題。國內企業招聘的PHP職位之多說明了一切。
  • PHP-語言基礎「程式設計師培養之路第三十一天」
    php.......?>注意:純php腳本文件要求:1. 開始標籤要在第一行頂頭寫;2. 刪除結束標籤。圖一php標籤之外是html語言環境,在純php代碼環境下,這些html字符(包括看不見的空格或者回車,制表符號)也會一同輸出,引發意外錯誤。
  • 黑馬程式設計師:Java代碼的基本格式
    類需要使用class關鍵字定義,在class前面可以有一些修飾符,格式如下:修飾符class類名{程序代碼}在編寫Java代碼時,需要特別注意幾個關鍵:1.Java中的程序代碼可分為結構定義語句和功能執行語句
  • PHP程式設計師必備的8款質量檢查工具
    【IT168 編譯】程式設計師之間流傳著一句話,「PHP是最好的語言」。雖然這是一句戲謔,但是不可否認的是PHP確實很受程式設計師青睞,本文我們將為大家推薦8款很酷的PHP質量檢查工具。
  • php中的算術運算符和遞增遞減運算符怎麼使用?
    php運算符的定義是什麼?昨天給大家談了程序的變量和常量,今天給大家聊聊運算符,運算符和變量是每種計算機編程語法必不可少的,運算符是指於執行程序代碼運算,它會針對一個以上操作數來運算,它是執行某種運算的符號,又稱操作符如圖所示
  • php程式設計師看過來,這老外是在吐糟你嗎?看看你中了幾點!
    ,特別是php程式設計師,看看你有沒有說中的。其中,有一名程式設計師網友對他這段話做了一個翻譯,內容如下:「你當 PHP 程式設計師也 OK,你數組下標從 1 開始也 OK,你的 IDE 用淺色主題也 OK,你代碼不寫注釋也 OK,
  • Python語言教程算術運算與算術表達式的介紹
    Python語言教程算術運算與算術表達式的介紹 Python語言教程在算術運算符與算術的表達方式是我們值得學習的知識。下面我們就來詳細的看看Python語言教程中的相關信息。
  • 在《程式設計師升職記》中體驗「代碼人生」
    前言在移動網際網路的浪潮之下,程式設計師儼然成為了炙手可熱的職業之一。鑑於編程這項技術作為程式設計師們安身立命之本,且各類晦澀難懂的計算機語言的學習成本太高,直接導致了絕大多數人體驗到了什麼叫「從入門到放棄」。遊戲的前期關卡大多在介紹相關代碼塊的作用,並引導玩家如何進行遊戲,右上角你的「上司」會不厭其煩地把工作目標和實現方法告訴玩家,循循善誘的讓人理解不同基本指令的用途。
  • 程式設計師:為啥我寫的代碼幾個月後自己也看不懂?
    這對好多程式設計師來說是種折磨,邊看邊罵,這寫的是什麼東西呀。相信好多人都有這種經歷。圖片來之網際網路那麼為啥會出現這樣一個局面哦,其實這裡面有很多講究的地方了,如果不注意的話,不光是看不懂別人寫的代碼,即使是自己寫的代碼,幾個月後你再去瞧瞧,你也會發蒙,那麼接下來就分析一下這種情況形成的原因及怎麼去解決它們。
  • 別的程式設計師都看不起PHP程式設計師?
    別的程式設計師都看不起PHP程式設計師?好多人都說PHP比較簡單,不如Java或C++等高大上,甚至都被現在的Python給比下去了。雖然確實有一部分程式設計師覺得它很low,但是我不這麼覺得,程序語言歸結根底,無非就是用來解決問題的一種工具。
  • 程式設計師編程入門必知!程式設計師需要學什麼
    學習語言的過程中還要有機會進行檢驗,不能只編寫代碼,還要檢驗代碼的結果運行是否正確,也就是某些可以運行結果的軟體我們要有,不過許多的程式語言都要求有被程式設計師設計來講代碼轉換成機器能理解的語言的編譯器。其他一些語言,比如Python,使用可以立即轉換成程序而不需要編譯。一些語言有自己的往往包含著代碼編輯器、調試器和/或者翻譯以及調試的IDEs(集成開發環境)。
  • 看了這個鍵盤,你認為是什麼語言程式設計師?python程式設計師:不是我!
    作者點評:你應該是前端程式設計師吧,如果是java或者php這類後端程式設計師,離開分號還能活,那就奇怪了!網友二:所以說嘛寫python多好,不費鍵盤作者點評:寫python為啥不費鍵盤,表示不是很懂。網友三:這是c和java程式設計師不是python和golang作者點評:php程式設計師表示也是這樣的,python和golang的確了解的不是很多,不過自從人工智慧火了之後,python的地位提高了很多!
  • 把女朋友當代碼,程式設計師相親這樣介紹自己,網友:情商高又幽默
    寫程序作為一個門檻相對比較高的職業,對數學能力、英語能力、邏輯能力都有一定的要求,能幹上三年以上的,絕對有自己的獨特之處,要麼勤奮努力、要麼邏輯清晰、要麼聰明過人。一般的程式設計師如果三年內得不到提升,還要每天加班敲代碼到深夜,早就離開了,能留下來一直幹下去的都是好樣的。
  • 黑馬程式設計師史上最強JavaEE學習路線圖震撼發布!!!
    黑馬程式設計師微信號:heiniu526傳智播客旗下網際網路資訊,學習資源免費分享平臺7月11日,傳智播客在北京舉辦了以
  • 程式設計師現實生活中的8個呆萌bug,敲代碼五年以上的肯定都遇到過
    很多人認為程式設計師是代碼的機器,每天只知道敲代碼,其實這種看法非常片面。程式設計師不僅僅精通代碼的編寫,還要熟悉項目所在行業的知識,例如開發門禁系統的程式設計師要對門禁系統了解,開發自動控制的程式設計師要熟悉自動控制的原理。
  • PHP 對程式設計師的要求更高
    首先, 大家都知道, PHP也是一種編譯型腳本語言, 和其他的預編譯型語言不同, 它不是編譯成中間代碼, 然後發布.. 而是每次運行都需要編譯..PHP雖然是一種編譯型腳本語言, 但是它的編譯速度非常快, 它的編譯不做任何優化, 就是簡單的忠實的把你所寫的代碼翻譯成對應的Opcodes. 而其他語言因為在編譯器做很多的優化工作, 會造成編譯比較重, 也一定程度上要求它們分離.所以, 理論上來說, 通過編譯執行分離, 想達到源碼加密, 是不會有什麼太大收效的, 因為它很容易被方向.
  • 程式設計師感慨:招聘只要大牛,三年php找不到工作,行情這麼慘?
    在職場,程式設計師這個行業的特點就是,會就會,不會就是不會。行與不行,運行一下就知道了。沒口水,也沒太多的辦公室政治。很多職場人選擇這一行也是因為這個優點。但如果你的代碼不行,也基本就意味著你能力不夠,沒有餘地。而隨著程式設計師這個職業的普及,轉行來寫程序的人也是越來越多,於是乎。
  • 如何用一句話激怒程式設計師?這11句話算是摸著程式設計師的脾氣了!
    網友三:這個需求很簡單上世是朵花:這是老梗了,上半句這個需求很簡單,下半句怎麼實現我不管,橫批:明天上線。網友四:php是最好的語言上世是朵花:這個著名的神段子你還記著呢,不過貌似對程式設計師沒什麼殺傷力。網友五:呦,頭還沒禿呢!