php生成驗證碼

2021-09-17 21:16:35 字數 2091 閱讀 9455

有時候,為了防止一些惡意程式爬取網頁指令碼,我們會在請求上設定一些門檻,

最常見的就是使用驗證碼,還有人機驗證指令碼,比如谷歌的recaptcha,cloudflare的5秒盾,這裡只介紹驗證碼,最常用的是驗證碼。

本文涉及到的大部分函式(以image開頭)均為gd庫所提供。

首先用imagecreatetruecolor建立個黑色畫布:

$img

=imagecreatetruecolor

(100,40

);

10040分別是長和寬,就是驗證碼的尺寸,

暫時生成三種顏色,這裡使用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是乙個生成隨機數的函式,09即生成的隨機數範圍。

不過rand生成的數隨機性不好,所以這裡改用mt_rand,使用方法一致。

imagestring

($img,5

,35,10

,$code

,$black

);

5為字型,3510為輸出座標,$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 輸...