亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

php用戶注冊登錄系統(tǒng)之驗證碼制作

驗證碼的分析

登錄注冊頁面設(shè)置驗證碼主要是為了防止暴力破解、惡意注冊等情況的發(fā)生,是屬于網(wǎng)站的標(biāo)配內(nèi)容,到今天已經(jīng)發(fā)展成將驗證碼直接發(fā)送到用戶手機(jī)或者郵箱進(jìn)行驗證,本節(jié)只做最簡單的圖片驗證碼的驗證,大家可以通過本節(jié),了解驗證碼驗證的原理


生成驗證碼的簡單流程圖

生成驗證碼的流程圖.png

具體的實現(xiàn)見下面的內(nèi)容


生成驗證碼背景圖

1.開啟php的GD擴(kuò)展

打開php.ini文件,將extension=php_gd2.dll這一項的注釋去掉,開啟它,如果本來是開啟的則不需要改動

p1.png

接下來,我們來制作一個60X15的白色背景圖片

2.創(chuàng)建畫布

畫布,一種資源型數(shù)據(jù)。可以操作的圖像資源。

  • 創(chuàng)建新畫布(新建)

ImageCreate(寬,高),創(chuàng)建基于調(diào)色板的畫布。

imageCreateTrueColor(寬,高);創(chuàng)建真彩色的畫布。

  • 基于圖片創(chuàng)建畫布(打開)

imageCreateFromJPEG(圖片地址);

imageCreateFromPNG(圖片地址);

imageCreateFromGIF(圖片地址);

我們創(chuàng)建一個真彩色的畫布:

$width=60;
$height=15;
//創(chuàng)建畫布
$img=imageCreateTrueColor($width,$height);

大家可以嘗試使用var_dump();將$img輸出查看其類似是不是資源型

3.操作畫布

分配顏色:如果需要在畫布上使用某個顏色,應(yīng)該先將顏色分配到畫布上。

使用函數(shù):

顏色標(biāo)識?= imageColorAllocate(畫布,R,G,B);

//分配顏色
$white = imageColorAllocate($img,0xff,0xff,0xff);

填充畫布:將填充點(diǎn),連續(xù)并且顏色相同的點(diǎn)進(jìn)行填充(替換)

使用函數(shù):

imageFill(畫布, 填充位置x,?填充位置Y,顏色標(biāo)識)完成

位置采用坐標(biāo)進(jìn)行管理:

原點(diǎn):0,0,畫布的左上角。

向右,x軸增加,向下Y軸增加。

//填充顏色到畫布
imageFill($img,0,0,$white);

4.輸出畫布

將畫布中處理好的圖樣信息,輸出出來。

典型的:

  • 輸出到圖片文件。

  • 直接輸出。

使用函數(shù):

imagePNG(畫布[, 文件地址])://在指定地址生成文件

imageJPEG();//在網(wǎng)頁上直接輸出,我們的驗證碼采用這種方式

imageGIF();//同上一個

如果沒有第二個參數(shù),表示直接輸出。

直接輸出到瀏覽器,需要告知瀏覽器,響應(yīng)數(shù)據(jù)的類型應(yīng)該是PNG格式的圖片:

使用指令Content-type

//直接輸出

header('Content-Type:image/jpeg;');

imageJPEG($img);

注:一個畫布可以輸出多次,輸出為各種格式!

5.銷毀畫布資源

使用函數(shù):imageDestroy();

imageDestroy($img);



生成驗證碼的值

1.首先必須定義所以可能出現(xiàn)的字符,獲取所有字符的總長度以及我們要生成的驗證碼的長度

代碼如下:

//生成驗證碼的值
$chars = '1234567890';//所以可能出現(xiàn)的字符
$chars_len=strlen($chars);
$code_len=4;//驗證碼的長度
$code='';//初始化驗證碼字符串

2.分四次,每次從所有可能出現(xiàn)的字符中取出一個數(shù)字,最后將四位數(shù)字鏈接在一起,生成驗證碼的值

for($i=1;$i<=$code_len;++$i){
?? ?$rand=mt_rand(0,$chars_len-1);//隨機(jī)取0-9中的任意一個數(shù)字
?? ?$code.=$rand;//將取出來的數(shù)字連接在一起
}

3.開啟session,將驗證碼值存入session中,用于驗證

//存入session中,用于驗證-------------------------
session_start();
$_SESSION[' ver_code']=$code;


將驗證碼值放入驗證碼背景圖片中

1.給驗證碼值分配隨機(jī)顏色

//隨機(jī)分配字符串顏色
$str_color=imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));

2.使驗證碼值居中寫在背景圖上面

//計算字符串的居中
//字符串大小
$font=5;
//畫布尺寸
$img_w=imageSX($img);
$img_h=imageSY($img);
//字體的尺寸
$font_w=imagefontwidth($font);
$font_h=imagefontheight($font);
//字符串的尺寸
$code_w=$font_w*$code_len;
$code_h=$font_h;
$x=($img_w-$code_w)/2;
$y=($img_h-$code_h)/2;
//把驗證碼輸出到畫布上----------------------------
imageString($img,$font,$x,$y,$code,$str_color);

3.輸出驗證碼

//直接輸出
imageJPEG($img);
imageDestroy($img);


完整代碼如下

<?php
//生成驗證碼背景圖---------------------------------
header('Content-Type:image/jpeg;');
//背景圖尺寸
$width=60;
$height=15;
//創(chuàng)建畫布
$img=imageCreateTrueColor($width,$height);
//分配顏色
$white = imageColorAllocate($img,0xff,0xff,0xff);
//填充顏色到畫布
imageFill($img,0,0,$white);
//生成驗證碼的值----------------------------------
$chars = '1234567890';//所以可能出現(xiàn)的字符
$chars_len=strlen($chars);
$code_len=4;//驗證碼的長度
$code='';//初始化驗證碼字符串
for($i=1;$i<=$code_len;++$i){
    $rand=mt_rand(0,$chars_len-1);//隨機(jī)取0-9中的任意一個數(shù)字
    $code.=$rand;//將取出來的數(shù)字連接在一起
}
//存入session中,用于驗證-------------------------
session_start();
$_SESSION['ver_code']=$code;
//隨機(jī)分配字符串顏色------------------------------
$str_color=imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
//計算字符串的居中
//字符串大小
$font=5;
//畫布尺寸
$img_w=imageSX($img);
$img_h=imageSY($img);
//字體的尺寸
$font_w=imagefontwidth($font);
$font_h=imagefontheight($font);
//字符串的尺寸
$code_w=$font_w*$code_len;
$code_h=$font_h;
$x=($img_w-$code_w)/2;
$y=($img_h-$code_h)/2;
//把驗證碼輸出到畫布上----------------------------
imageString($img,$font,$x,$y,$code,$str_color);
//直接輸出
imageJPEG($img);
imageDestroy($img);
?>


繼續(xù)學(xué)習(xí)
||
<?php //生成驗證碼背景圖--------------------------------- header('Content-Type:image/jpeg;'); //背景圖尺寸 $width=60; $height=15; //創(chuàng)建畫布 $img=imageCreateTrueColor($width,$height); //分配顏色 $white = imageColorAllocate($img,0xff,0xff,0xff); //填充顏色到畫布 imageFill($img,0,0,$white); //生成驗證碼的值---------------------------------- $chars = '1234567890';//所以可能出現(xiàn)的字符 $chars_len=strlen($chars); $code_len=4;//驗證碼的長度 $code='';//初始化驗證碼字符串 for($i=1;$i<=$code_len;++$i){ $rand=mt_rand(0,$chars_len-1);//隨機(jī)取0-9中的任意一個數(shù)字 $code.=$rand;//將取出來的數(shù)字連接在一起 } //存入session中,用于驗證------------------------- session_start(); $_SESSION['ver_code']=$code; //隨機(jī)分配字符串顏色------------------------------ $str_color=imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); //計算字符串的居中 //字符串大小 $font=5; //畫布尺寸 $img_w=imageSX($img); $img_h=imageSY($img); //字體的尺寸 $font_w=imagefontwidth($font); $font_h=imagefontheight($font); //字符串的尺寸 $code_w=$font_w*$code_len; $code_h=$font_h; $x=($img_w-$code_w)/2; $y=($img_h-$code_h)/2; //把驗證碼輸出到畫布上---------------------------- imageString($img,$font,$x,$y,$code,$str_color); //直接輸出 imageJPEG($img); imageDestroy($img); ?>
提交重置代碼