ホームページ >バックエンド開発 >PHPの問題 >PHPでデジタル検証コードを実装する方法

PHPでデジタル検証コードを実装する方法

藏色散人
藏色散人オリジナル
2021-10-18 09:30:012664ブラウズ

php メソッドでデジタル検証コードを実装します: 1. imagecreatetruecolor 関数を使用して検証コード ベース イメージを実装します; 2. imagecolorallocate メソッドを使用してデジタル検証コードを実装します; 3. 干渉要素を追加します; 4. 検証を保存します情報。

PHPでデジタル検証コードを実装する方法

この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

phpデジタル検証コードを実装するにはどうすればよいですか?

php はデジタル検証コードを実装します

PHP を使用して検証コードを実装します。検証コードは、機械操作と人間の操作を区別し、セキュリティを向上させるためのものです。サーバー ソフトウェアをインストールする必要があります。wamp を使用し、php 検証コード ページを作成します。

これを達成するには次のステップに分かれています:

1. 検証コード ベース イメージを実装する

目標: PHP コードを通じて 100*30px の画像を生成する
メソッド :

resource imagecreatetruecolor(int $width,int $height)

注:

(a) GD 拡張子に依存します
(b) 画像を出力する前に、画像を出力する必要があります事前のヘッダー情報
(c) このメソッドのデフォルトの出力は黒の背景です
//
2. デジタル検証コードを実装します
メソッド:

int imagecolorallocate(resource $image ,int $red ,int $green,int $blue);

bool imagestring(resource $image,int $font,int $x,int $y,string $s,int $col);
注: /フォントの重なりや不完全な表示を避けるためのフォント サイズと分布の制御
//
3. 干渉要素の追加
目的: 検証コードに干渉要素、干渉点または線を追加します
方法:

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

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

注: 「他のものに執着する」ことを避けるために、干渉情報の色を適切に制御する必要があります;

4. SESSION を通じて検証情報を保存する

目的: 検証を記録する便宜上のサーバー側のコード情報 ユーザー入力後の検証
メソッド: bool session_start(void)
注: (a) session_start() はスクリプトの先頭にある必要があります
(b) 次の場合複数のサーバーを使用する場合は、セッション情報の一元管理を考慮する必要があります

5. フォームを通じて検証コードを送信して検証します
目標: 生成された検証コードをユーザーに提供し、その正当性を検証します。ユーザー確認コード
メソッド: htmlff9c23ada1bcecdd1a0fb5d5a0f18437 フォームの基本
validate.php

<?php
session_start();
$image=imagecreatetruecolor(100,30);
$bgcolor=imagecolorallocate($image,255,255,255); //#fff
imagefill($image, 0, 0, $bgcolor);
$captch_code=&#39;&#39;;
//画出4个随机的数字或者字母
for($i=0;$i<4;$i++){
$fontsize=6;
//为了让数字的颜色不同,使用随机颜色rand(0,120),120之前是深色
$fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
$data=&#39;abcdefghijklmnopqrstuvwxyz123456789&#39;;//由于o和0对于一些人不太好区别,所以把0去掉了
$fontcontent=substr($data,rand(0,strlen($data)),1);
$captch_code.=$fontcontent;
$x=($i*100/4)+rand(5,10);
$y=rand(5,10);
//水平画一条字符串
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
$_SESSION[&#39;authcode&#39;]=$captch_code;
//增加点干扰元素
for($i=0;$i<200;$i++){
$pointcolor=imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));
//画一个单一像素
imagesetpixel($image,rand(1,99),rand(1,99),$pointcolor);
}
//增加线干扰元素
for($i=0;$i<3;$i++){
$linecolor=imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));
imageline($image,rand(1,99),rand(1,29),rand(1,99),rand(1,29),$linecolor);
}
header(&#39;content-type:image/png&#39;);
imagepng($image);
imagedestroy($image);

form.php

<?php
if(isset($_REQUEST[&#39;authcode&#39;])){
session_start();
if(strtolower($_REQUEST[&#39;authcode&#39;])==$_SESSION[&#39;authcode&#39;]){
echo &#39;<font color="#0000cc">输入正确</font>&#39;;
}else{
echo &#39;<font color="#cc0000><b>输入错误</b></font>&#39;;
}
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>确认验证码</title>
</head>
<body>
    <form method="post" action=&#39;./form.php&#39;>
        <div>验证码图片:
        <img id="code_img" border="1" src="./validate.php?r=<?php echo rand();?>" width="100" alt="">
        <a href="javascript:void(0)" οnclick="document.getElementById(&#39;code_img&#39;).src=&#39;./validate.php?r=&#39;+Math.random()">换一个?</a>
        </div>
        <div>请输入图片中的内容:<input type="text" name="authcode" value=""></div>
        <div><input type="submit" value="提交" style="padding:6px 20px;"></div>
    </form>
</body>
</html>

推奨される学習: 「

PHP ビデオ チュートリアル」 「

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

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