為了防止用戶利用機器人自動注冊、登錄、灌水,現在網站一般都采用了驗證碼技術,就是將一串隨機產生的數字或符號,生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶肉眼識別其中的驗證碼信息,輸入表單提交網站驗證,驗證成功后才能使用某項功能。
昨天做學習有一個作業需要自己寫圖片驗證碼,寫完之后我把它記錄下來作為一篇筆記。
先展示一下我做出來的效果(自己也可根據自己的要求對圖片背景、隨機數位數、顏色等進行調整)
php代碼如下:
文件名: idcode.php
<?php session_start();//開啟會話 $img = imagecreatetruecolor(60, 30);//創建真彩圖像資源,大小60*30 $black = imagecolorallocate($img, 0x00, 0x00, 0x00);//分配一個黑色 $green = imagecolorallocate($img, 0x00, 0xFF, 0x00);//分配一個綠色 $white = imagecolorallocate($img, 0xFF, 0xFF, 0xFF);//分配一個白色 imagefill($img,0,0,$white);// 從左上角開始填充白色,即背景顏色為白色 //生成隨機的驗證碼 $code = ''; for($i = 0; $i < 4; $i++) { $code .= rand(0, 9); } $_SESSION['vCode']=$code;//加入會話變量中 imagestring($img, 5, 8, 8, $code, $black);//imagestring ($image , $font , $x , $y ,$s ,$col ) //加入噪點干擾,阻止機器識別 for($i=0;$i<100;$i++) { imagesetpixel($img, rand(0, 60) , rand(0, 30) , $black);//在圖片上繪出一點。參數 x、y 為欲繪點的坐標,參數 col 表示該點的顏色 imagesetpixel($img, rand(0, 60) , rand(0, 30) , $green);//繪制綠色的點 } //輸出驗證碼 header("content-type: image/png");//說明欲輸出的圖片類型格式 imagepng($img);//函數用來建立一張 PNG 格式圖形 imagedestroy($img);//銷毀圖像,釋放與 $img 關聯的內存
引入HTML中:
<img src="php/idcode.php" alt="">
最后我的效果如下: