有時候,為了防止一些惡意程式爬取網頁指令碼,我們會在請求上設定一些門檻,本文涉及到的大部分函式(以最常見的就是使用驗證碼,還有人機驗證指令碼,比如谷歌的recaptcha,cloudflare的5秒盾,這裡只介紹驗證碼,最常用的是驗證碼。
image
開頭)均為gd庫所提供。
首先用imagecreatetruecolor
建立個黑色畫布:
$img
=imagecreatetruecolor
(100,40
);
100
和40
分別是長和寬,就是驗證碼的尺寸,
暫時生成三種顏色,這裡使用imagecolorallocate
:
$white
=imagecolorallocate
($img
,0xff
,0xff
,0xff
);
$black
=imagecolorallocate
($img
,0x00
,0x00
,0x00
);
$green
=imagecolorallocate
($img
,0x00
,0xff
,0x00
);
$img
即前面建立好的,後面三個引數分別是顏色的rgb值,可以是普通的十進位制數,範圍是0~255
,這個函式並不會用其他顏色把原圖覆蓋掉。
現在,用imagefill
把影象填充為白色:
imagefill
($img,0
,0,$white
);
然後生成四位隨機數字:
$code=''
;for($i
=0;$i
<4;
++$i
)$code.=
rand(0
,9);
rand
是乙個生成隨機數的函式,0
和9
即生成的隨機數範圍。
不過rand
生成的數隨機性不好,所以這裡改用mt_rand
,使用方法一致。
imagestring
($img,5
,35,10
,$code
,$black
);
5
為字型,35
和10
為輸出座標,$code
就是要顯示的文字,$black
為文字顏色,這裡用前面生成的黑色。
// 迴圈50次是為了提**擾程度
for($i=
0;$i<50;
++$i
)
大致解釋:用imagesetpixel
給$img
對應的影象的(mt_rand(0,100), mt_rand(0, 40))
加上$black
對應的顏色。
最後,我們用imagepng
直接輸出資料,但因為識別問題,應該先用header
告訴瀏覽器型別,不然會被當做文字,導致顯示成亂碼。
// content-type是內容型別
header
('content-type: image/png');
imagepng
($img
);
為了節省資源,最好在不用的時候就釋放資源。
imagedestroy
($img
);
php生成驗證碼
header content type image gif 初始化 border 0 是否要邊框 1要 0不要 how 4 驗證碼位數 w how 15 寬度 h 20 高度 fontsize 5 字型大小 alpha abcdefghijkmnopqrstuvwxyz 驗證碼內容1 字母 numb...
php 生成驗證碼
驗證碼個數 num 4 驗證碼寬度 width 80 驗證碼高度 height 20 驗證碼 注意是字串 code 生成驗證碼 for i 0 i num i 驗證碼儲存到session中 session start session verifycode code 建立影象 image imagec...
php 生成驗證碼
che.php session start im imagecreatetruecolor 100,30 設定顏色 bg imagecolorallocate im,0,0,0 背景色 te imagecolorallocate im,255,255,255 字型顏色 for i 0 i 4 i 輸...