前言
以前覺得圖片驗證碼很神祕的,但是今天看了看網上的教程,發現並不是很難,PHP5具體實現如下。createphoto.php文件用來生成圖片驗證碼,並通過session向test.php傳遞驗證碼內容;而test.php則在表單中引用生成的圖片和驗證用戶的輸入。
代碼實現(PHP5)
<?php #createphoto.php #啓用session session_start(); #生成4個隨機字符 $ary = 'qwertyuiopasdfghjklzxcvbnm0123456789'; for ($i = 0; $i < 4; $i++) { $index = rand(0, 35); $rundstr .= $ary[$index]; } #把隨機數保存到session $_SESSION[rundstr] = $rundstr; #圖片尺寸 $x_size = 100; $y_size = 30; #新建一個真彩色圖像 $img = p_w_picpathcreate($x_size, $y_size); #生成各種顏色 p_w_picpathcolorallocate($img, 230, 230, 230); #設置圖片的背景色 $fontcolor = p_w_picpathcolorallocate($img, 0, 0, 0); #生成字體的顏色 $pointcolor = p_w_picpathcolorallocate($img, 0, 0, 0); #生成噪點的顏色 #添加200個噪點 for ($i = 0; $i < 200; $i++) { p_w_picpathsetpixel($img, rand(0, $x_size), rand(0, $y_size), $pointcolor); } //添加5條幹擾線 for ($i = 0; $i < 5; $i++) { $linecolor = p_w_picpathcolorallocate($img, rand(0, 225), rand(0, 225), rand(0, 225)); #生成干擾線的顏色 p_w_picpathline($img, rand(0, 100), 0, rand(0, 100), rand(0, 30), $linecolor); } #繪圖 p_w_picpathstring($img, 6, rand(0, 30), rand(5, 12), $rundstr, $fontcolor); //顯示圖片 header("Content_type:p_w_picpath/jpeg"); p_w_picpathjpeg($img); ?>
<?php #test.php #啓動session session_start(); #驗證 if ($_POST[inputvalue]) { if ($_POST[inputvalue] == $_SESSION[rundstr]) { echo "成功"; } else { echo "失敗"; } } ?> <form action="" method="post"> <input type="text" name="inputvalue" size="20"></input> <img src="createphoto.php"></img></br> <input type="submit" name="submit" value="確定"></input> </form>
運行效果
訪問test.php,輸入6q94,點擊確定;
說明
1、首先要啓動gd庫,可通過WampServer(PHP -> PHP擴展 -> php_gd2),或修改PHP.ini文件(去掉extension=php_gd2.dll前的";"號);
2、p_w_picpathcreate ( int x_size, int y_size ) // 創建圖像,返回圖像對象,x就是寬 ,y就是高;
3、p_w_picpathcolorallocate ( resource p_w_picpath, int red, int green, int blue ) // 第一次調用是爲圖像設置顏色,返回顏色的值;
4、p_w_picpathstring ( resource p_w_picpath, font, int x, int y, 內容 , 顏色 ) // 繪圖;
5、rand( int x, int y ) // 生成隨機數,範圍[x , y]閉區間;
6、p_w_picpathsetpixel ( resource p_w_picpath, int x, int y, int color ) // 畫點,xy是點在圖像中的座標;
7、p_w_picpathline ( resource p_w_picpath, int x1, int y1, int x2, int y2, int color ) // 畫線,x1y1是起始點座標,x2y2是終點座標;
8、header("Content_type:p_w_picpath/jpeg") // 說明文件類型
9、p_w_picpathjpeg($img) // 顯示圖片