ホームページ  >  記事  >  バックエンド開発  >  画像処理技術を利用して検証コードを生成する(PHPグラフィックス画像の典型的な応用チュートリアル3)

画像処理技術を利用して検証コードを生成する(PHPグラフィックス画像の典型的な応用チュートリアル3)

黄舟
黄舟オリジナル
2017-04-24 17:25:012125ブラウズ

画像処理技術を使用して検証コードを生成する (PHP グラフィックスと画像の典型的なアプリケーションチュートリアル 3)

デジタル検証コード、グラフィック検証コード、テキスト検証コード、等ここでは、画像処理技術を利用して生成された認証コードについて紹介します。

前回の記事「GD2関数を使って画像に文字を追加する方法(PHPグラフィックスと画像の代表的な応用チュートリアル2)」で画像に文字を追加する方法を紹介しましたので、引き続き紹介していきます。今日は画像テクノロジーを使用して検証コードを生成する方法について説明します。

以下では、画像処理技術を使用して検証コードを生成する方法を紹介します。具体的なコードは次のとおりです:

<?php
session_start();
// 告诉浏览器,这个文件,是一个png图片
header(&#39;Content-type: image/png&#39;);
// 创建图像
$image = imagecreatetruecolor(50,20);
// 填充颜色 - ps里的点击画布填色
imagefill($image,0,0,imagecolorallocate($image,149,188,205));
//加入干扰象素 , 循环100次
for ($i = 0; $i < 100; $i++) {
    $randcolor = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
//画像素点函数
    imagesetpixel($image, rand(1, 55), rand(1,18), $randcolor);
}
// 设置颜色
$red = imagecolorallocate($image, 255,255,255);
$code = "";
for( $i=1; $i <=4; $i++){
    $rand_code = rand(1,9); // 生成1-9的随机数
    imagestring($image, 5, 5+($i-1)*10, 2, $rand_code,$red); // 将文字写入图片
    $code .= $rand_code;
}
// 生成图片
imagepng($image);
// 销毁图片, 释放内存
imagedestroy($image);
?>

出力結果は次のとおりです:

画像処理技術を利用して検証コードを生成する(PHPグラフィックス画像の典型的な応用チュートリアル3)

以下に検証コードを生成する最も簡単な例を紹介します。日常の開発でよく使用される例です。具体的な手順は次のとおりです:

(1) checks.php ファイルを作成し、GD2 関数を使用してファイル内に 4 桁の検証コードを作成し、生成された検証コードをセッション変数に保存します。コードは次のとおりです。

<?php
session_start();          //初始化Session变量
header("content-type:image/png");        //设置创建图像的格式
$image_width=70;                          //设置图像宽度
$image_height=18;                          //设置图像高度
srand(microtime()*100000);                //设置随机数的种子
for($i=0;$i<4;$i++){                      //循环输出一个4位的随机数
    $new_number.=dechex(rand(0,15));
}
$_SESSION[check_checks]=$new_number;       //将获取的随机数验
证码写入到Session变量中
$num_image=imagecreate($image_width,$image_height);    //创建一个画布
imagecolorallocate($num_image,255,255,255);         //设置画布的颜色
for($i=0;$i<strlen($_SESSION[check_checks]);$i++){     //循环读取
    Session变量中的验证码
$font=mt_rand(3,5);                                //设置随机的字体
$x=mt_rand(1,8)+$image_width*$i/4;               //设置随机字符所在位置的X坐标
$y=mt_rand(1,$image_height/4);                   //设置随机字符所在位置的Y坐标
$color=imagecolorallocate($num_image,mt_rand(0,100),
    mt_rand(0,150),mt_rand(0,200)); //设置字符的颜色
imagestring($num_image,$font,$x,$y,$_SESSION
[check_checks][$i],$color);   //水平输出字符
}
imagepng($num_image);              //生成PNG格式的图像
imagedestroy($num_image);          //释放图像资源
?>

in 上記のコードでは、認証コードを出力する際に​​、各文字の位置、色、フォントを乱数によって取得し、ブラウザ内でさまざまな認証コードを生成することができ、悪意のあるユーザーの Web サイトへの攻撃を防ぐこともできます。システム。

(2) ユーザーログインフォームを作成し、checks.php ファイルを呼び出し、フォームページに画像のコンテンツを出力し、フォーム情報を送信し、入力された検証コードが正しいかどうかを if 条件文を使用して判断します。ユーザーが入力した確認コードがランダムに生成された確認コードと等しい場合、「ユーザーはログインに成功しました!」というプロンプトが表示されます。コードは次のとおりです:

<?php
session_start();           //初始化Session
if($_POST["Submit"]!=""){
    $checks=$_POST["checks"];        //获取验证码文本框的值
    if($checks==""){           //如果验证码的值为空,则弹出提示信息
        echo "<script> alert(&#39;验证码不能为空&#39;);window.location.
href=&#39;index.php&#39;;</script>";
    }
//如果用户输入验证码的值与随机生成的验证码的值相等,则弹出登录成功提示
    if($checks==$_SESSION[check_checks]){
        echo "<script> alert(&#39;用户登录成功!&#39;);window.location.
href=&#39;index.php&#39;;</script>";
    }else{            //否则弹出验证码不正确的提示信息
        echo "<script> alert(&#39;您输入的验证码不正确!&#39;);window.
location.href=&#39;index.php&#39;;</script>";
    }
}
?>

自分のコンピュータで試すことができます。投稿しません。画像はこちら、使用方法について ここでは、「GD2関数を使って幾何学図形を描画する(PHPグラフィックスと画像の代表的なアプリケーションチュートリアル4)」を紹介します!

以上が画像処理技術を利用して検証コードを生成する(PHPグラフィックス画像の典型的な応用チュートリアル3)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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