目次
PHP 検証コード識別、PHP 検証コード
PHP图形验证码识别
ホームページ バックエンド開発 PHPチュートリアル PHP 検証コードの認識、PHP 検証コード_PHP チュートリアル

PHP 検証コードの認識、PHP 検証コード_PHP チュートリアル

Jul 13, 2016 am 10:21 AM
識別コード

PHP 検証コード識別、PHP 検証コード

まず最初に、検証コード認識に関するいくつかの記事をお勧めします。良いと思います

PHP は検証コード認識 (プライマリ) を実装します

bpニューラルグリッド認識検証コードについて

1. アイデア

確認コードを見つけた場合、それを特定したい場合はどうすればよいですか?
まずいくつかの確認コードを観察してみましょう....


人間の目で観察すると、認証コードに含まれる文字がはっきりと認識されます。 では、人間の目の「認識メカニズム」とは何でしょうか?
それはおそらく認証コードの画像の文字の背景の色の違いです。文字と背景に色の違いがない場合、明らかに認証コードを判断できませんか?

だから、まずは人から始めましょう。

画像の色、つまり画像のRGB情報から始めます。

リーリー

RGB情報を取得する関数を定義

リーリー

2番目、二値化

人間の目は検証コードを識別することができるため、検証コードのRGB情報には特定の特徴があるため、それを観察する必要があります。RGB配列を直接印刷して観察することは困難です。たくさん

PHPにおける検証コードの認識(一次記事)については、作者の判断によるものです

リーリー

まずグレースケールを取得してから判断します

リーリー

その後、グレースケール情報に基づいて画像を印刷します

グレースケール情報を印刷しないように注意してください。 リーリー

$grayArray[$i][$j] < 80 から明らかな出力があることに注意してください。適切なしきい値を観察して選択し、配列 0101 を取得しました。画像を文字 ( 1) と背景 ( 0)、つまり二値化です。

リーリー

3. ノイズ除去

しかし、私たちの判断に影響を与える小さな点がいくつか見つかりました

私たちはこれらの干渉ノイズ点に気づくことができますが、私たちが機械である場合、これらの点が文字であるかどうかをどのように判断するのでしょうか?

それでは次に、これらの文字を削除する必要があります。

黒い点の上下左右8点がすべて白い場合はノイズ点と判断し、除去して白とします

リーリー

ノイズが消えていることがわかりました。

4.部門

現時点では、単一の数字と文字を操作する必要があります。まず数字を抽出します。

いくつかの認証コードの文字がつながっており、これが特に難しいです!!!

左から右、右から左、上から下、下から上にスキャンし、白い斑点を除去し、境界線を見つけます。

リーリー

次に、左から右にスキャンして文字の分割を見つけます

各次元が文字である 3 次元配列を返します。

リーリー

5. 傾き調整

3番目の9が少し傾いていることがわかりました

傾いた画像を「修正」する必要があります

人はどうやって対処するのでしょうか? まず、「どれくらい傾いているか」を目で観察し、次にどれだけ画像をねじって観察→ネガティブフィードバック→脳がねじれの角度を常に伝達し、最終的に写真は「正しい」ものになります。

人はどのようにして「傾き」を観察するのでしょうか? 上の「2」を例にとると、左上(右下)よりも右上(左下)の方が黒が多いかもしれません。

X 軸が下向き、Y 軸が右向きの直交座標系を確立します

各層の黒い点の分布の中点の座標を計算し、一連の離散点を取得し、これらの点が位置する直線を計算します (線形回帰式の計算)。式 y = b* x+a、

私はある日実際にこの公式を使用しました! ! !

それはおそらく傾いた直線であり、直線を通る直線の傾き角度を計算し、それを多くの角度で回転させると、画像は「右」になるはずです。

aとbの計算は以下の通りです

リーリー

角を曲がる方法は?

リーリー リーリー

これは三角関数です。私は長い間三角関数に触れていなかったので、ほとんど忘れていました。

関数を定義する

リーリー

角を曲がってください

リーリー

もう少し正しく見ると

6. ユニフォームのサイズ

上文中因为各种操作,每个字符大小不一,我们需要统一大小

七、特征值的建立

有很多方法

1、逐像素特征提取法
这是一种最简单的特征提取方法。它可以对图像进行逐行逐列的扫描,当遇到黑色像素时取其特征值为1,遇到白色像素时取其特征值为0,这样当扫描结束后就获得一个维数与图像中的像素点的个数相同的特征向量矩阵。
这种方法提取的信息量最大,但是它的缺点也很明显,就是适应性不强。

2、骨架特征提取法
两幅图像由于它们的线条的粗细不同,使得两幅图像差别很大,但是将它们的线条进行细化后,统一到相同的宽度,如一个像素宽时,这是两幅图像的差距就不那么明显。利用图形的骨架作为特征来进行数码识别,就使得识别有了一定的适应性。一般使用细化的方法来提取骨架,细化的算法有很多,如Hilditch算法、Rosenfeld算法等。对经过细化的图像利用EveryPixel函数进行处理就可以得到细化后图像的特征向量矩阵。骨架特征提取的方法对于线条粗细不同的数码有一定的适应性,但是图像一旦出现偏移就难以识别。

3、微结构法
微结构法将图像分为几个小块,统计每个小块的像素分布。本文提取出汉字的39个特征,存储在数组f[0]~f[38]中。具体算法可分为四步:

步骤一:把字符平均分成9份,如图4.1所示,给每一份编号如图4.2,统计每一份内黑色像素的个数,存储在数字tz[0]~tz[9]中,统计在行方向和列方向上每一份内的黑色像素个数和与之相邻的一份内黑色像素个数的比值作为一个特征,例如:行方向上提取特征f[0]=tz[1]/ tz[0],f[1]=tz[2]/ tz[1],f[2]=tz[0]/ tz[2],…,f[8]=tz[6]/ tz[8];列方向上f[9]=tz[3]/ tz[0],f[10]=tz[6]/ tz[3],f[11]=tz[0]/ tz[6],…,f[17]=tz[2]/ tz[8],共18个特征。

步骤二:把字符横向分成三份,如图4.3所示,统计每一份内的黑色像素个数,每一份内的黑色像素个数与前一份内黑色像素个数的比值作为一个特征,f[18]=tz[10]/ tz[9],f[19]=tz[11]/ tz[10],f[20]=tz[9]/ tz[11];把字符纵向分成三份,如图4.4所示,统计每一份内的黑色像素个数,每一份内的黑色像素个数与前一份内黑色像素个数的比值作为一个特征,f[21]=tz[13]/ tz[12],f[22]=tz[14]/ tz[13],f[23]=tz[12]/ tz[14];共六个特征。

步骤三:如图4.5,在竖直方向上找出三列,统计在该列中跳变点的个数,即相邻点像素值从0变到255的次数,共三个特征,记为f[24],f[25],f[26];在水平方向上找出三行列,统计在该行中跳变点的个数,即相邻点象素值从0变到255的次数,共三个特征,记为f[27],f[28],f[29]。

图4.5

步骤四:把每一份内黑色象素的个数tz[0]~tz[9],作为9个特征,记为:f[30]~f[38]。

这样得到汉字的共39个特征,根据这些特征就可以区分每个车牌汉字,进行识别。

我们使用最简单的逐像素特征提取法。

多多增加数据库,识别率会增加的

八、识别验证码

对于一个新的验证码,进行上文操作,然后对比数据库就可以了

630f5d6378c37647b3584ac66e34898c

试试:


PHP图形验证码识别

Header("Content-type: image/gif");
/*
* 初期化
*/
$border = 0; //border 1 はい: 0 いいえ
$how = 4 ; //検証コードの数字
$w = $how*15; //画像の幅
$fontsize = 5; //フォントサイズ
$alpha = "abcdefghijkmnopqrstuvwxyz";コード内容 1: 文字
$number = "023456789" //検証コード内容 2: 数字
$randcode = ""; //検証コード文字列の初期化
srand((double)microtime()*1000000);乱数seed

$im = ImageCreate($w, $h); //検証用画像を作成

/*
* 基本フレームを描画
*/
$bgcolor = ImageColorAllocate($im, 255, 255, 255) ; //背景色を設定します
ImageFill($im, 0, 0, $bgcolor); //背景色を塗りつぶします
if($border)
{
$black = ImageColorAllocate($im, 0, 0, 0); / /枠線の色を設定します
ImageRectangle($im, 0, 0, $w-1, $h-1, $black);//枠線を描画します
}

/*
* ランダムな文字を少しずつ生成します
*/
for ($i=0; $i<$how; $i++)
{
$alpha_or_number = mt_rand(0, 1); //文字または数字
$​​str = $alpha_or_number ?
$that = mt_rand(0, strlen($str)-1); //どの文字を取るか
$code = substr($str, $that, 1) //どの文字を取るか
$j = !$ i ? 4 : $j+ 15; //文字の位置を描画
$color3 = ImageColorAllocate($im, mt_rand(0,100), mt_rand(0,100)); // 文字の色
, $j, 3 , $code, $color3); //文字を描画します
$randcode .= $code; //認証コード文字列を少しずつ追加します
}

/*
* 干渉を追加します
*/
; $i=0; $i<5; $i++)//背景干渉線を描画します
$color1 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255)); color
ImageArc($ im, mt_ra...残りのテキスト>>



PHP 検証コード認識または ASP プログラムを使用してプログラム認識を作成することもできます

原理は難しくなく、PHP を通じて画像を生成するだけです。 PHP の画像処理機能を使用して、この画像にいくつかの文字を書き込むだけで準備完了です。文字を書くときは、書いた文字を記録することに注意してください。この記録はセッションを通じて行われます。その後、検証中に $_SESSION 変数を直接呼び出すだけです。

具体的なコードは次のとおりです:
画像の表示と入力確認コードの検証に使用される 2 つのファイルがあります
yangzhengma.php

session_start();
if(!empty($_GET['sub '] )){
if($_SESSION['checks'] == $_GET['ma']){
echo "検証コードは正しいです
";
}else{
echo "検証コードが間違っています!
";
}
}
?>

<br> 確認コード例<br>







確認コードを入力してください:





画像のアドレスに注意 PHPで生成した画像のファイルアドレスに書き込みます

画像の生成にはcheck.phpを使用します

session_start();
header('content-type: image/jpeg');
$image_width=70;
$image_height=25;
$str="";
$arr=array(1,2,3,4,5,6,7,8,9,' A'、'B'、'C'、'D'、'E'、'F'、'G'、'H'、'I'、'J'、'K'、'L'、'M' 、'N'、'P'、'Q'、'R'、'S'、'T'、'U'、'V'、'W'、'X'、'Y'、'Z');
for ($i =0; $i .... ..全文の残り>>

http://www.bkjia.com/PHPjc/857272.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/857272.html技術記事 PHP 検証コード認識、PHP 検証コードは最初に検証コード識別に関するいくつかの記事をお勧めします、PHP で検証コード識別を実現するのが良いと思います (一次記事) bp ニューラル グリッド認識検証コードについて 1. 感想...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? Apr 06, 2025 am 12:02 AM

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

phpstormでCLIモードをデバッグする方法は? phpstormでCLIモードをデバッグする方法は? Apr 01, 2025 pm 02:57 PM

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

See all articles