使用影像處理技術產生驗證碼(PHP圖形影像的典型應用教學3)
驗證碼功能的實作方法很多,有數位驗證碼、圖形驗證碼和文字驗證碼等。在本節中介紹一種使用影像處理技術產生的驗證碼。
在上一篇文章《如何使用GD2函數在圖片上新增文字(PHP圖形影像的典型應用教學2)》中,我們介紹如何在圖片中加入文字的介紹,那我們今天繼續跟大家介紹如何使用影像技術產生驗證碼。
以下介紹使用影像處理技術產生驗證碼,具體程式碼如下:
<?php session_start(); // 告诉浏览器,这个文件,是一个png图片 header('Content-type: image/png'); // 创建图像 $image = imagecreatetruecolor(50,20); // 填充颜色 - ps里的点击画布填色 imagefill($image,0,0,imagecolorallocate($image,149,188,205)); //加入干扰象素 , 循环100次 for ($i = 0; $i < 100; $i++) { $randcolor = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); //画像素点函数 imagesetpixel($image, rand(1, 55), rand(1,18), $randcolor); } // 设置颜色 $red = imagecolorallocate($image, 255,255,255); $code = ""; for( $i=1; $i <=4; $i++){ $rand_code = rand(1,9); // 生成1-9的随机数 imagestring($image, 5, 5+($i-1)*10, 2, $rand_code,$red); // 将文字写入图片 $code .= $rand_code; } // 生成图片 imagepng($image); // 销毁图片, 释放内存 imagedestroy($image); ?>
輸出結果為:
上面是最簡單的一個產生驗證碼的實例,下面我們介紹一個在日常開發中緊張用到的實例。具體步驟如下:
(1)建立一個checks.php文件,在該文件中使用GD2函數建立一個4位的驗證碼,並且將產生的驗證碼保存在Session變數中,程式碼如下:
<?php session_start(); //初始化Session变量 header("content-type:image/png"); //设置创建图像的格式 $image_width=70; //设置图像宽度 $image_height=18; //设置图像高度 srand(microtime()*100000); //设置随机数的种子 for($i=0;$i<4;$i++){ //循环输出一个4位的随机数 $new_number.=dechex(rand(0,15)); } $_SESSION[check_checks]=$new_number; //将获取的随机数验 证码写入到Session变量中 $num_image=imagecreate($image_width,$image_height); //创建一个画布 imagecolorallocate($num_image,255,255,255); //设置画布的颜色 for($i=0;$i<strlen($_SESSION[check_checks]);$i++){ //循环读取 Session变量中的验证码 $font=mt_rand(3,5); //设置随机的字体 $x=mt_rand(1,8)+$image_width*$i/4; //设置随机字符所在位置的X坐标 $y=mt_rand(1,$image_height/4); //设置随机字符所在位置的Y坐标 $color=imagecolorallocate($num_image,mt_rand(0,100), mt_rand(0,150),mt_rand(0,200)); //设置字符的颜色 imagestring($num_image,$font,$x,$y,$_SESSION [check_checks][$i],$color); //水平输出字符 } imagepng($num_image); //生成PNG格式的图像 imagedestroy($num_image); //释放图像资源 ?>
在上面的程式碼中,對驗證碼進行輸出時,每個字元的位置、顏色和字體都是透過隨機數來取得的,可以在瀏覽器中產生各式各樣的驗證碼,還可以防止惡意使用者攻擊網站系統。
(2)建立一個使用者登入的表單,並呼叫checks.php文件,在表單頁中輸出影像的內容,提交表單訊息,使用if條件語句判斷輸入的驗證碼是否正確。如果使用者填寫的驗證碼與隨機產生的驗證碼相等,則提示"使用者登入成功!",代碼如下:
<?php session_start(); //初始化Session if($_POST["Submit"]!=""){ $checks=$_POST["checks"]; //获取验证码文本框的值 if($checks==""){ //如果验证码的值为空,则弹出提示信息 echo "<script> alert('验证码不能为空');window.location. href='index.php';</script>"; } //如果用户输入验证码的值与随机生成的验证码的值相等,则弹出登录成功提示 if($checks==$_SESSION[check_checks]){ echo "<script> alert('用户登录成功!');window.location. href='index.php';</script>"; }else{ //否则弹出验证码不正确的提示信息 echo "<script> alert('您输入的验证码不正确!');window. location.href='index.php';</script>"; } } ?>
大家可以在自己的電腦上試一試,這裡就不貼出圖片了,關於使用影像處理技術產生驗證碼的內容就介紹到這裡了,以下我們將為大家介紹《使用GD2函數繪製幾何圖形(PHP圖形影像的典型應用教學4)》!
以上是使用影像處理技術產生驗證碼(PHP圖形影像的典型應用教學3)的詳細內容。更多資訊請關注PHP中文網其他相關文章!