ホームページ  >  記事  >  バックエンド開発  >  PHP は、非常に詳細な単純な検証コード認識を実装しています。

PHP は、非常に詳細な単純な検証コード認識を実装しています。

藏色散人
藏色散人転載
2020-07-24 14:22:234923ブラウズ
#

ずっと書こうと思っていたのですが、久しぶりに興味が出たので記録することにしました。

CAPTCHA

コンピュータと人間を区別するための完全に自動化された公開チューリング テスト (CAPTCHA) (一般に CAPTCHA として知られる) は、コンピュータと人間を区別するための完全に自動化された公開チューリング テストです。ユーザーをコンピューターや人間と区別するプログラム。 CAPTCHA テストでは、サーバーとしてのコンピューターが、ユーザーが回答するための質問を自動的に生成します。この質問はコンピュータによって生成および判断できますが、答えることができるのは人間だけです。コンピュータは CAPTCHA の質問に答えることができないため、質問に答えるユーザーは人間であると考えることができます。
百科事典の紹介

簡単に言うと、ランダムに生成された文字が画像上に出力されます [他の形式のドラッグ アンド ドロップや SMS 認証コードなどはここでは考慮されません]。

一般的なタイプ

PHP は、非常に詳細な単純な検証コード認識を実装しています。

アイデア

この記事はデモのみを目的としているため、最初の画像の確認コードは次のとおりです。例として説明します。
PHP は、非常に詳細な単純な検証コード認識を実装しています。

画像上のすべての点には RGB 値があり、カラー ピッカーから取得できます。検証コードが次のとおりであることが肉眼で確認できます。画像は純粋なデジタル ソリッド カラーです。背景

PHP は、非常に詳細な単純な検証コード認識を実装しています。

カラー ピッカーを通じて、検証コードの背景色の RGB 値が次のとおりであることがわかります。 (212,214,204)

実装

PHP の imagecolorsforindex 関数を使用して、画像内のすべての点の RGB 値を取得しましょう:

$url = 'http://210.32.33.91:8080/reader/captcha.php';
$im = imagecreatefromgif($url);
imagegif($im, '1.gif');
$rgbArray = array();
$res = $im;
$size = getimagesize($url);

$wid = $size['0'];
$hid = $size[&#39;1&#39;];for ($i = 0; $i < $hid; ++ $i) {    for ($j = 0; $j < $wid; ++ $j) {
        $rgb = imagecolorat($res, $j, $i);
        $rgbArray[$i][$j] = imagecolorsforindex($res, $rgb);
    }
}

結果

PHP は、非常に詳細な単純な検証コード認識を実装しています。


これは何に使うのですか? データの表示方法、出力方法を変更しましょう。背景色は #、検証コード領域は で、もう一度見てみましょう:

for ($i = 0; $i < $hid; $i ++) {    for ($j = 0; $j < $wid; $j ++) {        
        if ($rgbArray[$i][$j][&#39;red&#39;] == 212) {            echo &#39;□&#39;;
        } else {            echo &#39;■&#39;;
        }
    }    echo "<br>";
}

効果:
PHP は、非常に詳細な単純な検証コード認識を実装しています。##もう分かりましたか?

しかし、まだ疑問があるかもしれません。目で見ることはできますが、その量をどうやって知ることができますか?

以下で分析してみましょう:


PHP は、非常に詳細な単純な検証コード認識を実装しています。各認証コード間の距離は 4 スペース、左右のスペースは 6/10 スペース、上下のスペースは 16/10 スペースです。
より明確に見えるように、これらの干渉ポイントをもう一度削除しましょう:


PHP は、非常に詳細な単純な検証コード認識を実装しています。 非常に明確ですか? まだ疑問に思う人もいるかもしれません。画像上の数字が何であるかをどうやって知ることができますか?
わかりました、私のアイデアをお話しましょう。

xx

# を 0 と 1 に置き換えてみましょう。これらの数字の形は固定されているため、0 ~ 9 を取得できます。各単語 8*10 の各領域は、0 と 1 で構成されます。 ## 8 セグメントごとにもう一度実行し、4 つのスペースの間隔を削除し、ループして 0 ~ 9 の 01 の組み合わせ値を取得します。
PHP は、非常に詳細な単純な検証コード認識を実装しています。

$dic = array(    &#39;00011000001111000110011011000011110000111100001111000011011001100011110000011000&#39; => 0,    &#39;00011000001110000111100000011000000110000001100000011000000110000001100001111110&#39; => 1,    &#39;00111100011001101100001100000011000001100000110000011000001100000110000011111111&#39; => 2,    &#39;01111100110001100000001100000110000111000000011000000011000000111100011001111100&#39; => 3,    &#39;00000110000011100001111000110110011001101100011011111111000001100000011000000110&#39; => 4,    &#39;11111110110000001100000011011100111001100000001100000011110000110110011000111100&#39; => 5,    &#39;00111100011001101100001011000000110111001110011011000011110000110110011000111100&#39; => 6,    &#39;11111111000000110000001100000110000011000001100000110000011000001100000011000000&#39; => 7,    &#39;00111100011001101100001101100110001111000110011011000011110000110110011000111100&#39; => 8,    &#39;00111100011001101100001111000011011001110011101100000011010000110110011000111100&#39; => 9);
Get These図10に示す画像RGBを配列として結合し、画像RGBを解析して対応する配列値に置き換えるたびに検証コード値が得られる。以下にデモを行ってみましょう:


PHP は、非常に詳細な単純な検証コード認識を実装しています。

最後に、正確さを期すために 100 サイクルを実行して、次のことを確認します:

検証コード認識 ! PHP は、非常に詳細な単純な検証コード認識を実装しています。

笑、精度は100%です最後に書きました
この記事の目的はWEB開発を容易にするため、認証コードを生成する際は安全性に十分注意し、不正な目的には使用しないでください PHP は、非常に詳細な単純な検証コード認識を実装しています。

今回のプロジェクトで実証したサイト(杭州典子大学図書館→マイライブラリ)開けません、皆さん原則を参照してください

コードは github にあります:https://github.com/chaclee/sf

以上がPHP は、非常に詳細な単純な検証コード認識を実装しています。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。