検索
ホームページバックエンド開発PHPチュートリアルPHP 検証コードの認識、PHP 検証コード_PHP チュートリアル

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

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

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

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

1. アイデア

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


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

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

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

リーリー

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

リーリー

2番目、二値化

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

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

リーリー

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

リーリー

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

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

$grayArray[$i][$j] リーリー

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个特征,根据这些特征就可以区分每个车牌汉字,进行识别。

 

 

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

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

 

八、识别验证码

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

<span> 1</span> <span>/*</span>
<span> 2</span> <span> *进行匹配
</span><span> 3</span> <span> *@param  $Image  图片路径
</span><span> 4</span>  <span>*/</span>
<span> 5</span> <span>public</span> <span>function</span> run(<span>$Image</span><span>){
</span><span> 6</span>     <span>$data</span> = <span>array</span>('','','',''<span>);
</span><span> 7</span>     <span>$result</span>=""<span>;
</span><span> 8</span>     <span>$bilu</span> = ''<span>;
</span><span> 9</span>     <span>$maxarr</span> = ''<span>;
</span><span>10</span>     
<span>11</span>     <span>//</span><span>提取特征</span>
<span>12</span>     <span>$this</span>->prepare(<span>$Image</span><span>);
</span><span>13</span>     <span>$yuanshi</span> = <span>$this</span>-><span>getErzhi();
</span><span>14</span>     <span>$yijijiangzao</span> = <span>$this</span>->reduceZao(<span>$yuanshi</span><span>);
</span><span>15</span>     <span>$small</span> = <span>$this</span>->cutSmall(<span>$yijijiangzao</span><span>);
</span><span>16</span>     <span>for</span>(<span>$k</span>=0;<span>$k</span><4;<span>$k</span>++<span>){
</span><span>17</span>         <span>$tianchong</span> = <span>$this</span>->tianChong(<span>$small</span>[<span>$k</span><span>]);
</span><span>18</span>         <span>$tiaozhenjiaodu</span> = <span>$this</span>->singleSlopeAdjust(<span>$tianchong</span><span>);
</span><span>19</span>         <span>$tongyidaxiao</span> = <span>$this</span>->tongyiDaxiao(<span>$tiaozhenjiaodu</span><span>);
</span><span>20</span>         <span>for</span>(<span>$i</span>=0;<span>$i</span><20;<span>$i</span>++<span>){
</span><span>21</span>             <span>for</span>(<span>$j</span>=0;<span>$j</span><20;<span>$j</span>++<span>){
</span><span>22</span>                 <span>$data</span>[<span>$k</span>] .= <span>$tongyidaxiao</span>[<span>$i</span>][<span>$j</span><span>];    
</span><span>23</span> <span>            }    
</span><span>24</span> <span>        }
</span><span>25</span> <span>    }
</span><span>26</span> 
<span>27</span>     <span>//</span><span> 进行关键字匹配</span>
<span>28</span>     <span>foreach</span>(<span>$data</span> <span>as</span> <span>$numKey</span> => <span>$numString</span><span>)
</span><span>29</span> <span>    {
</span><span>30</span> 
<span>31</span>         <span>$max</span> = 0<span>;
</span><span>32</span>         <span>$num</span> = 0<span>;
</span><span>33</span>         <span>foreach</span>(<span>$this</span>->Keys <span>as</span> <span>$value</span> => <span>$key</span><span>)
</span><span>34</span> <span>        {
</span><span>35</span>             <span>similar_text</span>(<span>$value</span>, <span>$numString</span>,<span>$percent</span><span>);
</span><span>36</span>             <span>if</span>(<span>$percent</span> > <span>$max</span><span>)
</span><span>37</span> <span>            {
</span><span>38</span>                 <span>$max</span> = <span>$percent</span><span>;
</span><span>39</span>                 <span>$num</span> = <span>$key</span><span>;
</span><span>40</span>                 <span>$zim</span> = <span>$value</span><span>;
</span><span>41</span> <span>            }
</span><span>42</span>             <span>if</span>(<span>$max</span>>95<span>){
</span><span>43</span>                 <span>break</span><span>;
</span><span>44</span> <span>            }
</span><span>45</span> <span>        }
</span><span>46</span>         <span>$result</span> .=<span>$num</span><span>;
</span><span>47</span>         <span>$maxarr</span>[] = <span>$max</span><span>;
</span><span>48</span> <span>    }
</span><span>49</span>     <span>//</span><span> 查找最佳匹配数字</span>
<span>50</span>     <span>$re</span> = <span>$maxarr</span><span>;
</span><span>51</span>     <span>$re</span>[] = <span>$result</span><span>;
</span><span>52</span>     <span>return</span> <span>$re</span><span>;
</span><span>53</span>     <span>//</span><span>return $result.'|max|一:'.$maxarr['0'].'|二:'.$maxarr['1'].'|三:'.$maxarr['2'].'|四:'.$maxarr['3'];</span>
<span>54</span> }

 

试试:

 

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{
$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 $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 検証コードの認識、PHP 検証コード_PHP チュートリアル



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



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

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP:それは死にかけていますか、それとも単に適応していますか?PHP:それは死にかけていますか、それとも単に適応していますか?Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの未来:適応と革新PHPの未来:適応と革新Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?Apr 10, 2025 am 09:39 AM

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?Apr 10, 2025 am 09:38 AM

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。Apr 10, 2025 am 09:37 AM

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、ファイルを安全に処理する方法をどのように処理しますか?PHPは、ファイルを安全に処理する方法をどのように処理しますか?Apr 10, 2025 am 09:37 AM

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Apr 10, 2025 am 09:33 AM

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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