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

PHPユーザー登録?ログインシステム用認(rèn)証コード作成

認(rèn)証コードの解析

ログインおよび登録ページに認(rèn)証コードを設(shè)定することは、主にブルートフォースクラッキング、悪意のある登録などを防ぐために行われており、現(xiàn)在ではWebサイトの標(biāo)準(zhǔn)コンテンツとして開発されています。認(rèn)証コードを直接ユーザーの攜帯電話または電子メールに送信します。このセクションでは、最も単純な畫像認(rèn)証コードのみを検証します。このセクションを使用して、認(rèn)証コード認(rèn)証の原理を理解することができます


A。検証コードを生成するための簡単なフローチャート

生成驗證碼的流程圖.png

具體的な実裝については以下の內(nèi)容を參照してください


検証コードの背景畫像を生成します

1. phpのGD拡張機(jī)能を有効にする

php.iniファイルを開き、extension=php_gd2.dllからコメントを削除して有効にします。元々有効になっている場合は、変更する必要はありません

p1.png

次に、 60X15の白い背景畫像を作りましょう

2.リソースデータの一種であるキャンバス

を作成します。操作可能な畫像リソース。

  • 新しいキャンバスの作成(New)

ImageCreate(width, height)、パレットベースのキャンバスを作成します。

imageCreateTrueColor(width, height); トゥルーカラーキャンバスを作成します。 image畫像に基づいてキャンバスを作成します(開いています)

  • mageCreatefromjpeg(畫像アドレス);

    $width=60;
  • $height=15;
//キャンバスを作成します

$img=imageCreateTrueColor($width,$height);

$img を表示するには、var_dump() を使用してみてください。出力 リソースタイプに似ていますか? 3. キャンバスを操作します

色の割り當(dāng)て: キャンバス上で特定の色を使用する必要がある場合は、最初にその色をキャンバスに割り當(dāng)てる必要があります。

使用関數(shù):
色の識別 = imageColorAllocate(canvas, R, G, B);

//色の割り當(dāng)て

$white = imageColorAllocate($img,0xff,0xff,0xff);

キャンバスを塗りつぶす

: 塗りつぶし點、連続する點を同じ色で塗りつぶす(置換する)関數(shù)を使用します:

imageFill(canvas, 塗りつぶし位置 x, 塗りつぶし位置 Y, 色の識別) を完了します

位置は座標(biāo)を使用して管理されます:

原點: 0, 0、キャンバスの左上隅。

右に行くほど X 軸が増加し、下に行くほど Y 軸が増加します。

//キャンバスに色を塗りつぶす
imageFill($img,0,0,$white);

4. キャンバスを出力する

キャンバスが出てきます。

通常:

  • 畫像ファイルに出力します。

  • ダイレクト出力。

使用関數(shù):

imagePNG(canvas[, file address])://指定されたアドレスにファイルを生成します

imageJPEG();//Webページに直接出力します。検証コードはこのメソッドを使用します

imageGIF();//前と同じ

2 番目のパラメータがない場合は、直接出力を意味します。

ブラウザに直接出力するには、応答データのタイプが PNG 形式の畫像であることをブラウザに通知する必要があります:

Content-type

//直接出力

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

imageJPEG($img);

注: キャンバスは、さまざまな形式で複數(shù)回出力できます。

5. キャンバスリソースを破棄します

関數(shù)を使用します: imageDestroy();

imageDestroy($img);



1. まず、使用可能なすべての文字を定義し、すべての文字の合計長と生成する検証コードの長さを取得する必要があります。コードは次のとおりです: //検証コードの値を生成します

$chars = '1234567890' ;//出現(xiàn)する可能性のある文字

$chars_len=strlen($chars);

$code_len=4;//確認(rèn)コードの長さ

$code='';//検証コード文字列



2 4回、毎回すべての可能な文字から數(shù)字を取り出し、最後に4つの數(shù)字を結(jié)合して検証コードの値を生成します

for($i=1) ;$i<=$code_len ;++$i){ $rand=mt_rand(0,$chars_len-1);//0 ~ 9 から任意の數(shù)字をランダムに選択します $code.=$rand;//番號を Together に送信します

}




3. セッションを開き、検証のためにセッションに検証コード値を保存します

//検証のためにセッションに保存します------ - ---------------session_start();$_SESSION[' ver_code']=$code;



認(rèn)証コードの値を認(rèn)証コードの背景畫像に入れます


1. 検証コード値にランダムな色を割り當(dāng)てます

//文字列の色をランダムに割り當(dāng)てます$str_color=imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand( 0,255)) ;

2. 認(rèn)証コードの値を中央に配置し、背景畫像に書き込みます

//文字列のセンタリングを計算します
//文字列サイズ
$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. 認(rèn)証コードを出力します

/ /直接出力
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);
?>


學(xué)び続ける
||
<?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); ?>
  • おすすめコース
  • コースウェアのダウンロード
現(xiàn)時點ではコースウェアはダウンロードできません?,F(xiàn)在スタッフが整理中です。今後もこのコースにもっと注目してください?