呵呵~今天來寫篇使用 PHP-GD 驗證碼
最近剛好冷ㄝ在問這個問題,以前我也是花不少時間研究這玩意兒怎設計
不凹他一﹑二餐再教他實在太過意不去了...
GD code 其實可以很簡單,也可以很複雜
產生出來的code,雜亂到連自己都難以辯別就好笑了
所以比較簡單的都是使用簡單的英文﹑數字作為驗證
有個國外的高手在這方面下了苦心,他將某學校的書拿來掃描,把部分無法電腦辯識的字做成
驗證碼,讓線上的使用者在辯證時,幫助電腦建立資料庫~
而且提供API讓人免費使用,你可以上 google youtube 這些網站,他們站裡的
那套驗證碼多是用同一套的~
不過我這次也分享一下最簡單的設計好了,因為真的有些新手還是不知道^^
流程大概如下,首先是原本的網頁表單
你可能有 form﹑input type=text 這類的東西
表單裡就會多張 gd 的圖片,跟一個讓人keyin的輸入框
表單送出後,還要不忘檢查當初電腦產生的code,是否跟使用者輸入的是否一致
為了防止輕易被破解,所以通常不會利用 get 還是什麼參數去拿圖,會在伺服器使用 session 的功能
當圖片開啟時,電腦就會針對連線的session,random一份 gd code
其實這樣想就很簡單了~
看吧,這支是 http://59.126.75.42/demo/gd.php
事實上他的原本碼是使用php所撰寫,code當然也簡單到不行
程式碼大概是這樣~
session_start();
header('Content-type: image/png');
$width=65;
$height=35;
$_SESSION['gd_code']=rand(1,9).rand(0,9).rand(0,9);
$new_image=imagecreatetruecolor ( $width , $height);
//顏色宣告
$color_blue=imagecolorallocate($new_image,200,200,255); //顏色 藍
$color_black=imagecolorallocate($new_image,0,0,0); //顏色 黑
//整張弄成白的
imagefill($new_image,0,0,$color_blue);
//放入數值,偷偷的使用新細明體 @_@ 其實你可以換成網路上免錢的字型,比較安全,像王漢忠大大的﹑飛哥的openfont…或其他免費的字型
ImageTTFText ($new_image,24, 0, 10, 25, $color_black, "uming.ttf",$_SESSION['gd_code']);
//輸出成png
imagepng($new_image);
// release memory
imagedestroy($new_image);
所以有看到了吧~啟動了session﹑宣告了header﹑弄個小畫布﹑亂數生字,置放位置,生成圖片
如此一來,表單只要送出後,去比對 $_SESSION['gd_code']就可以知道使用者是否輸入正確了
表單送出的那一頁也要事先啟動session呦~session_start();
簡單的示範~以上^^