ホームページ >バックエンド開発 >PHPチュートリアル >phpで作る簡易認証コード識別コード、php認証コードcode_PHPチュートリアル

phpで作る簡易認証コード識別コード、php認証コードcode_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:59:491011ブラウズ

phpで作った簡単な認証コード識別コード、php認証コードコード

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

認証コード

Completely Automated Public Turing Test to Tell Computers and Humans Apart (CAPTCHA) (一般に検証コードとして知られています) は、コンピューターと人間を区別する公開の全自動プログラムです。 CAPTCHA テストでは、サーバーとしてのコンピューターが、ユーザーが回答するための質問を自動的に生成します。この質問はコンピュータによって生成および判断できますが、答えることができるのは人間だけです。コンピュータは CAPTCHA の質問に答えることができないため、質問に答えるユーザーは人間であると考えられます。
百科事典の紹介

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

一般的なタイプ

感想

この記事はデモンストレーションのみを目的としており、最初の写真の確認コードは例として取り上げられています。

画像上のすべてのポイントには RGB 値があり、カラーピッカーを通じて取得できます。画像の検証コードが純粋なデジタル単色の背景であることが肉眼でわかります。

カラーピッカーを通して確認コードの背景色のRGB値が(212,214,204)であることがわかります

達成しました

PHP の

関数を使用して、画像内のすべてのポイントの RGB 値を取得しましょう: imagecolorsforindex リーリー

結果は以下の通りです:

これは何に使うのですか? データの表示方法を変更して背景色として出力してみましょう

、もう一度見てみましょう: リーリー ,验证码区域输出効果:


もうはっきりしましたか?

しかし、まだ疑問があるかもしれませんが、それがどれくらいかを知るにはどうすればよいですか?

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



各確認コードは直接 4 つのスペース、左右に 6/10 スペース、上下に 16/10 スペースが配置されています。

より明確に見るために、これらの干渉ポイントを削除しましょう:



これだけ話しても、どうやって写真の数字がわかるのかと疑問に思う人もいるかもしれません。

それでは、私のアイデアをお話しします。先ほどの

を 0 と 1 に置き換えます。これらの数字の形は固定されているので、各単語の 8*10 の各領域を取得できます。 0 と 1 があります。1 が構成されています、

8 セグメントごとに再度実行し、4 マス分のスペースを削除し、ループして 0-9 の 01 の組み合わせ値を取得しましょう:


リーリー これら 10 個を取得した後、画像の RGB が解析されるたびに配列に結合され、対応する配列値に置き換えられ、検証コード値が取得されます。以下でデモをしてみましょう:

最後に、正確さを期すために、100 個のループを見てみましょう:


はは、精度は 100% です

最後に書きました

この記事の目的は、WEB 開発者が検証コードを生成する際に安全性に注意し、違法な目的で使用しないようにすることです。


コードはgithubにあります:

興味がありそうな記事:

検証コード識別技術
  • 高度な検証コードを識別する方法の技術概要
  • C#で実装された簡単な検証コード識別例
  • C#のaforgeクラスライブラリを使用して検証コード例を識別する
  • C#検証コード識別基本メソッド例分析

http://www.bkjia.com/PHPjc/1096150.html

tru​​ehttp://www.bkjia.com/PHPjc/1096150.html技術記事 PHPで作った簡単な認証コード ずっと書きたかったこのPHP認証コード、久しぶりに興味が湧いたので簡単に記録してみました。 認証コードはコンピューターと人間を完全に自動的に区別します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。