CAPTCHA とは、「Completely Automated Public Turing test to Tell Computers and Humans Apart」の略で、ユーザーがコンピュータであるか人間であるかを識別する公開された完全自動プログラムです。これにより、悪意のあるパスワードのクラッキング、チケット詐欺、フォーラムのフラッディングが防止され、ハッカーが特定のプログラムを使用して特定の登録ユーザーが継続的にログイン試行することを効果的に阻止できます。実際、確認コードの使用は、多くのユーザーにとって一般的な方法です。この機能は比較的簡単な方法で実装されています。
この質問はコンピューターによって生成および判断できますが、答えることができるのは人間だけです。コンピュータは CAPTCHA の質問に答えることができないため、質問に答えるユーザーは人間であると考えられます。
PHP 生成の動的検証コードは PHP 画像処理に基づいています。まず、PHP の画像処理について説明します。1.php画像処理入門
一般的に生成されたグラフィックスは PHP のドキュメント形式で保存されますが、動的なグラフィックスは HTML の画像挿入メソッド SRC を通じて直接取得できます。たとえば、確認コード、ウォーターマーク、サムネイルなどです。
画像を作成するための一般的なプロセス:
1). 生成したい MIME タイプをブラウザーに伝えるヘッダーを設定します。最初のステップは、ファイルの MIME タイプと出力タイプを設定することです。出力タイプを画像ストリームに変更します。2). 画像領域を作成し、その後のすべての操作はこの画像領域に基づいて行われます。
3).空白の画像領域に塗りつぶされた背景を描画します。
4). 背景にグラフィックの輪郭を描いてテキストを入力します。
5).最終的なグラフィックを出力します。
6) すべてのリソースをクリアします。
7). 他のページから画像を呼び出します。
一般的に生成される画像は、png、jpeg、gif、wbmp です
2 番目のステップは、グラフィックス領域と画像の背景を作成することです
imagecreatetruecolor() は、サイズ )x_size
和 y_size
的黑色图像。语法:resource imagecreatetruecolor ( int $width
, int $height
の画像を表す画像識別子を返します
カラーフィラーが必要です; imagecolorallocate -- 画像に色を割り当てます3番目のステップは、空白の画像領域に塗りつぶされた背景を描画することです
構文: int imagecolorallocate ( resource )$image
, int $red
, int $green
, int $blue
この青色を背景に塗りつぶします; imagefill - 領域の塗りつぶし
構文: bool imagefill (リソース )$image
, int $x
, int $y
, int $color
カラーフィラー4番目のステップは、青色の背景に線やテキストなどを入力することです
$white = imagecolorallocate($im,255,255,255);
imageline() は、画像2つの線分を描画します: imageline
image
内の座標 x1
、y1
から x2 までの <code>color
カラーを使用します。 /code>, y2
(画像の左上が0,0)で線分を描画します。 構文: bool imageline ( resource $image
, int $x1
, int $y1
, int $x2
, int $y2
、 int $color
)color
颜色在图像 image
中从坐标 x1
,y1
到 x2
,y2
(图像左上角为 0, 0)画一条线段。语法:bool imageline ( resource $image
, int $x1
, int $y1
, int $x2
, int $y2
, int $color
imagestring() は、イメージライン($im,200,0,0,200,$white);
文字列を水平方向に描画します: imagestring
col
カラーを使用して、image
で表される画像の文字列 s
を x
に描画します。 code>y 座標 (これは文字列の左上隅の座標であり、画像全体の左上隅は 0, 0 です)。 font
が 1、2、3、4、または 5 の場合、組み込みフォントが使用されます。 構文: bool imagestring ( resource $image
、 int $font
、 int $x
、 int $y
、文字列 $s
、 int $col
)col
颜色将字符串 s
画到 image
所代表的图像的 x
,y
坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果font
是 1,2,3,4 或 5,则使用内置字体。语法:bool imagestring ( resource $image
, int $font
, int $x
, int $y
, string $s
, int $col
imagepng() は GD 画像 (image
)以 PNG 格式输出到标准输出(通常为浏览器),或者如果用 filename
给出了文件名则将其输出到该文件。语法:bool imagepng ( resource $image
[, string $filename
] ) をストリームします
imagepng($im);
imagedestroy() は image
关联的内存。语法:bool imagedestroy ( resource $image
) でリリースされます
imagedestroy($im);
サンプルコードは次のとおりです:
リーリー
表示効果:
添付: コードソースアドレスhttps://github.com/cnblogs-/php-captcha
ランダム コードは 16 進数を使用します。ぼかした背景とは、画像の背景に線や雪の結晶などを追加することを意味します。
1) ランダムコードを作成します
リーリー
string dechex ( int $number
),返回一字符串,包含有给定 number
パラメータの 16 進表現。
2) セッションに保存
リーリー
3)画像を作成します
リーリー
4) 背景をぼかす
リーリー
5) 出力と破壊
リーリー
これを global.func.php グローバル関数ライブラリにカプセル化し、呼び出しやすいように関数名を _code() にします。関数の柔軟性を高めるために、4 つのパラメーター $_width、$_height、$_rnd_code、$_flag を設定します。
* @param int $_width 検証コードの長さ: 6 桁が必要な場合は 75+50 が推奨され、8 桁が必要な場合は 75+50+50 が推奨されます。
* @param int $_height認証コードの高さ
* @ param int $_rnd_code 認証コードの桁数
* @param bool $_flag 認証コードに境界線が必要かどうか: 境界線ありの true、境界線なしの false (デフォルト)
カプセル化されたコードは次のとおりです:
リーリー リーリー
PHP 検証ページを作成し、セッションを通じて検証コードが一貫しているかどうかを確認します。
1)verification-code.php検証ページを作成します
リーリー
次のように表示されます:
2) 確認コードを生成するページを作成します
codeimg.php を作成して、verification-code.php HTML コードに img の検証コード画像を提供します
まず、codeimg.php ページでセッションを開く必要があります。
次に、カプセル化された global.func.php グローバル関数ライブラリを紹介します。最後に、run_code();
リーリー
3) セッション検証メカニズムを作成する
まず、verification-code.php ページでセッションを開く必要があります。
次に、検証コードを送信する方法を設計します。この記事は、action=verification の場合に送信されます。最後に、検証関数を作成します。原則は、クライアント ユーザーが送信した検証コードがサーバー codeimg.php のセッションの検証コードと一致するかどうかを確認することです。ここでは、js ポップアップ関数 _alert_back() を使用します。これも func.php;
にカプセル化します。verification-code.php の PHP コードを次のように変更します。
リーリー
3. 認証コードの画像をクリックして認証コードを更新します
上記の確認コードを更新したい場合は、確認コードの画像をクリックして確認コードを更新する codeimg.js 関数を作成してページを更新する必要があります。
リーリー
終了
転載大歓迎です。転載する場合は、転載の旨、原著者、元のブログ記事のアドレスを明記してください。
上記では、PHP における動的ランダム検証コード機構 (CAPTCHA) の実装について、さまざまな側面を含めて紹介しましたが、PHP チュートリアルに興味のある友人にとって役立つことを願っています。