ホームページ  >  記事  >  バックエンド開発  >  PHPイメージ検証コード生成機能の実装方法

PHPイメージ検証コード生成機能の実装方法

WBOY
WBOYオリジナル
2023-06-15 20:58:071269ブラウズ

PHP画像検証コード生成機能の実装方法

画像検証コードは画像形式で表示されるセキュリティ検証コードであり、ブルートフォースクラッキングや自動スクリプトなどの様々なネットワーク攻撃を効果的に防ぐことができます。攻撃は待ってください。人気のある Web プログラミング言語として、PHP には画像処理関数と、画像検証コード関数を簡単に実装できるライブラリが組み込まれています。この記事では、PHPベースの画像検証コード生成機能の実装方法を紹介します。

まず、画像検証コードの要素であるキャンバス、検証コード文字、干渉線、干渉点などを明確にする必要があります。次に、これらの要素を 1 つずつ実装して、完全な PHP イメージ検証コード生成関数を実装します。

  1. キャンバスの作成

キャンバスを作成するには、PHP の imagecreatetruecolor() 関数を使用できます。この関数は、指定されたサイズのトゥルーカラー イメージを作成します。この関数の呼び出し形式は次​​のとおりです。

resource imagecreatetruecolor ( int $width , int $height )

このうち、width パラメータと height パラメータはそれぞれ画像の幅と高さです。キャンバスを作成するコード例を次に示します。

// 创建画布
$image_width = 140; // 画布宽度
$image_height = 50; // 画布高度
$image = imagecreatetruecolor($image_width, $image_height);
  1. 背景色の設定

背景色を設定するには、PHP の imagefill() 関数を使用できます。この関数は画像に色合いを付け、画像全体を指定した色で塗りつぶします。この関数の呼び出し形式は次​​のとおりです。

bool imagefill ( resource $image , int $x , int $y , int $color )

このうち、image パラメータは image です。 resource、x、y パラメータは染色開始点の座標、color パラメータは imagecolorallocate() 関数を使用して作成される色です。

以下は、背景色を設定するコード例です。

// 设置背景颜色
$bg_color = imagecolorallocate($image, 255, 255, 255); // 白色 
imagefill($image, 0, 0, $bg_color); // 填充背景为白色
  1. 干渉線と干渉点を追加します

セキュリティを向上させるために、検証コードには、干渉線と干渉点を追加する必要があります。 PHP の基本的な画像処理関数でこれらの機能を実装できます。

干渉線を追加するには、PHP の imageline() 関数を使用できます。この関数は直線を描きます。この関数の呼び出し形式は次​​のとおりです:

bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

amongパラメータは画像リソース、(x1, y1) と (x2, y2) は線分の開始座標と終了座標、color パラメータは色です。

干渉点を追加するには、PHP の imagesetpixel() 関数を使用できます。この関数は画像内にピクセルを描画します。この関数の呼び出し形式は次​​のとおりです。

bool imagesetpixel ( resource $image , int $x , int $y , int $color )

このうち、image パラメータは画像です。リソース、(x, y) はピクセル点の座標、色パラメーターは色です。

次は、干渉線と干渉点を追加するコード例です:

// 添加干扰线
for ($i = 0; $i < 5; $i++) {
    $line_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 随机颜色
    imageline($image, rand(0, $image_width), rand(0, $image_height),
        rand(0, $image_width), rand(0, $image_height), $line_color);
}
// 添加干扰点
for ($i = 0; $i < 50; $i++) {
    $pixel_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 随机颜色
    imagesetpixel($image, rand(0, $image_width), rand(0, $image_height), $pixel_color);
}
  1. 検証コード文字の追加

最後のステップでは、次のことを行う必要があります。検証コード文字を追加します。検証コード文字には、数字、文字、記号などを使用できます。便宜上、ここでは数値検証コードのみを考慮します。

検証コード文字を追加するには、PHP の imagestring() 関数または imagettftext() 関数を使用できます。

imagestring() 関数を使用すると、関数は画像上に文字列を直接出力します。この関数の呼び出し形式は次​​のとおりです:

bool imagestring ( resource $image , int $font , int $x , int $y , string $string , int $color )

where , image パラメータは画像リソース、font はフォント サイズ、x と y は文字列の開始点座標、string は出力文字列、color は色です。

imagettftext()関数を使用すると、指定された文字列を指定されたフォント、サイズ、任意の回転角度に従って指定されたキャンバスに出力します。この関数の呼び出し形式は次​​のとおりです:

array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color ,
string $fontfile , string $ text )

このうち、imageパラメータは画像リソース、sizeはフォントサイズ、angleは回転角度、(x,y)は文字列の始点の座標、colorは色、fontfile はフォント ファイル、text は出力文字列です。

次に、検証コード文字を生成するコード例を示します。

// 添加验证码字符
$code = '';
for ($i = 0; $i < 4; $i++) {
    $digital_color = imagecolorallocate($image, rand(0, 200), rand(0, 200), rand(0, 200)); // 随机颜色
    $digital = rand(0, 9); // 随机数字
    $code .= $digital;
    // 按一定的规则将字符画布输出
    imagettftext($image, 20, rand(-30, 30), $i * 30 + 10, rand($image_height/2, $image_height-20),
        $digital_color, './arial.ttf', $digital);
}

最後に、検証コード文字は、後続の比較と検証のためにセッションに保存されます。

$_SESSION['code'] = $code;

完全なコード例:

session_start();

header("Content-type: image/png");

$image_width = 140; // 画布宽度
$image_height = 50; // 画布高度

$image = imagecreatetruecolor($image_width, $image_height); // 创建画布

$bg_color = imagecolorallocate($image, 255, 255, 255); // 白色 
imagefill($image, 0, 0, $bg_color); // 填充背景为白色

// 添加干扰线
for ($i = 0; $i < 5; $i++) {
    $line_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 随机颜色
    imageline($image, rand(0, $image_width), rand(0, $image_height),
        rand(0, $image_width), rand(0, $image_height), $line_color);
}

// 添加干扰点
for ($i = 0; $i < 50; $i++) {
    $pixel_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 随机颜色
    imagesetpixel($image, rand(0, $image_width), rand(0, $image_height), $pixel_color);
}

// 添加验证码字符
$code = '';
for ($i = 0; $i < 4; $i++) {
    $digital_color = imagecolorallocate($image, rand(0, 200), rand(0, 200), rand(0, 200)); // 随机颜色
    $digital = rand(0, 9); // 随机数字
    $code .= $digital;
    // 按一定的规则将字符画布输出
    imagettftext($image, 20, rand(-30, 30), $i * 30 + 10, rand($image_height/2, $image_height-20),
        $digital_color, './arial.ttf', $digital);
}

$_SESSION['code'] = $code; // 将验证码存入session

imagepng($image); // 输出验证码图片

imagedestroy($image); // 销毁图像资源

概要

PHP イメージ検証コード生成機能は、ネットワーク攻撃を防ぐための非常に実用的なテクノロジです。この記事では、PHPの画像検証コード生成機能の、キャンバスの作成、背景色の設定、干渉線や干渉点の追加、検証コード文字の追加などの実装方法を紹介します。これらの要素を組み合わせて使用​​することで、高品質で安全な画像検証コードを生成できます。

以上がPHPイメージ検証コード生成機能の実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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