ホームページ >バックエンド開発 >PHPチュートリアル >PHPをベースにした検証コードの作成例を詳しく解説

PHPをベースにした検証コードの作成例を詳しく解説

墨辰丷
墨辰丷オリジナル
2018-06-01 09:49:191239ブラウズ

この記事では、主に検証コードを作成するための PHP を紹介します。PHP を使用して Web サイト検証コードを検証することは、悪意のある登録、ブルートフォースクラッキング、またはプログラムのバッチ投稿を防ぐために設定されています。

ウェブサイトの登録、ログイン、またはメッセージページはすべて、ウェブサイトが機械によって悪意をもって登録されるのを防ぐために、現在の運営者の正当性を確認するための登録コードを必要とします。

認証コードの生成は、最初にランダムな文字列を取得し、キャンバスに書き込み、線や雪の結晶を描画するだけです。検証コードを生成するコード。

ソースコード:

<?php
session_start(); //开启session
//创建随机码,并保存在session中
for($i=0;$i<4;$i++)
{
$_nmsg.=dechex(mt_rand(0,15));
}
//保存到session中
$_SESSION[&#39;code&#39;]=$_nmsg;
//设置图片长和高

$_width=75;
$_height=25;
//创建一张图像
$_img=imagecreatetruecolor($_width,$_height);

//白色背景
$_white=imagecolorallocate($_img,255,255,255);
//填充到背景上
imagefill($_img,0,0,$_white);

//黑色边框
$_black=imagecolorallocate($_img,0,0,0);
imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);

//随即画出5个线条
for($i=0;$i<5;$i++)
{
$_rnd_color=imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$_rnd_color);
}

//雪花
for($i=0;$i<10;$i++)
{
$_rnd_color=imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($_img,1,mt_rand(1,$_width),mt_rand(1,$_height),"*",$_rnd_color);
}

//输出验证码

for($i=0;$i<strlen($_SESSION[&#39;code&#39;]);$i++)
{
imagestring($_img,5,10+$i*15,mt_rand(0,10),$_SESSION[&#39;code&#39;][$i],$_blackr);
}

//输出图像
header(&#39;Content-Type:image/png&#39;);
imagepng($_img);
//销毁图像
imagedestroy($_img);
?>

コードでは次の関数が使用されます:

mt_rand — より良い乱数を生成します
int mt_rand ([ int $min ], int $max ) 多くの古いones libc の乱数生成器には、いくつかの不確実で未知の特性があり、速度が遅いです。 PHP の rand() 関数は、デフォルトで libc 乱数ジェネレーターを使用します。

mt_rand() 関数は非公式にこれを置き換えるために使用されます。この関数は、乱数生成器としてメルセンヌ ツイスターの既知の機能を使用しており、libc が提供する rand() よりも平均して 4 倍高速に乱数値を生成できます。

dechex — 10 進数を 16 進数に変換し、指定された数値パラメーターの 16 進数表現を含む文字列を返します。変換できる最大値は 10 進数で 4294967295 で、結果は「ffffffff」となります。

imagecreatetruecolor — 新しいトゥルー カラー イメージを作成します
resource imagecreatetruecolor ( int $x_size , int $y_size )

imagecreatetruecolor() サイズ x_size および y_size の黒イメージを表すイメージ識別子を返します。

imagecolorallocate — 画像に色を割り当てます
int imagecolorallocate ( resource $image , int $red , int $green , int $blue )
imagecolorallocate() は、指定された RGB コンポーネントで構成される色を表す識別子を返します。赤、緑、青は、それぞれ目的の色の赤、緑、青の成分です。これらのパラメータは、0 ~ 255 の整数、または 16 進数の 0x00 ~ 0xFF です。 image で表される画像で使用される各色を作成するには、imagecolorallocate() を呼び出す必要があります。

imagefill — 領域の塗りつぶし
bool imagefill ( resource $image , int $x , int $y , int $color )
imagefill() は、イメージ image の座標 x、y の色を使用します (画像の左上隅)は 0, 0) Color は領域の塗りつぶしを実行します (つまり、x、y 点と同じ色の点および隣接する点が塗りつぶされます)。

imagerectangle — 長方形を描画します
bool imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col )
imagerectangle() は、col color を使用して画像内に長方形を描画します。左上隅の座標は x1、y1、右下隅の座標は x2、y2 です。画像の左上隅の座標は 0, 0 です。

imageline — 線分を描画します
bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
imageline() は、座標 x1 からの画像内のカラー color を使用します。 y1からx2、y2まで線分を描きます(画像の左上隅が0、0)。

imagestring — 文字列の線を水平に描画します
bool imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col )
imagestring() は、col color で文字列 s を描画しますimage で表される画像の x、y 座標に変換します (これは文字列の左上隅の座標であり、画像全体の左上隅は 0, 0 です)。フォントが 1、2、3、4、または 5 の場合は、内蔵フォントが使用されます。

imagepng — 画像を PNG 形式でブラウザまたはファイルに出力します
imagepng() GD 画像ストリーム (画像) を PNG 形式で標準出力 (通常はブラウザ) に出力します。または、ファイル名が filename で指定されている場合は出力しますこのファイルに。

imagedestroy — 画像を破棄します

imagedestroy() は画像に関連付けられたメモリを解放します。

ソースコードをcode.phpとして保存します。phpファイルですが、どのように使用すればよいでしょうか?

imagepng はこの php ファイルを png ファイルにエクスポートしました

直接呼び出すだけです

8f14cf8be6b010acf0b53b17391f56e4

確認コードを使用したい場合は、必ずセッションを開いてください

<?php
session_start();
echo $_SESSION[&#39;code&#39;];
?>

概要: 以上がこの記事の全内容です、皆様の学習に少しでもお役に立てれば幸いです。

関連する推奨事項:

php 挿入したデータの ID を取得するいくつかの方法

php シングルトン モードに基づいて mysql クラスをカプセル化する方法

でトランザクションを実行する方法を考えるPHP フレームワーク

以上がPHPをベースにした検証コードの作成例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。