亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php如何制作的簡單驗證碼識別代碼

發布時間:2021-07-01 10:12:44 來源:億速云 閱讀:209 作者:chen 欄目:開發技術

這篇文章主要講解了“php如何制作的簡單驗證碼識別代碼”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“php如何制作的簡單驗證碼識別代碼”吧!

一直想寫這個,過了很久今天興趣來了索性記錄下。

驗證碼

全自動區分計算機和人類的公開圖靈測試(英語:Completely Automated Public Turing test to tell Computers and Humans Apart,簡稱CAPTCHA),俗稱驗證碼,是一種區分用戶是計算機和人的公共全自動程序。在CAPTCHA測試中,作為服務器的計算機會自動生成一個問題由用戶來解答。這個問題可以由計算機生成并評判,但是必須只有人類才能解答。由于計算機無法解答CAPTCHA的問題,所以回答出問題的用戶就可以被認為是人類。
百科介紹

說的簡單點就是隨機生成的字符,輸出在一張圖片上[這里不考慮其他形式的拖拽/短信驗證碼等等]。

常見類型

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['1'];
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]['red'] == 212) {
   echo '□';
  } else {
   echo '■';
  }
 }
 echo "<br>";
}

效果:

php如何制作的簡單驗證碼識別代碼

這樣一下是不是很清楚了。

但是你可能還是有疑問,盡管可以看出來了,但是如何知道是多少呢?

下面我們來分析下:

php如何制作的簡單驗證碼識別代碼

每個驗證碼直接間距4格,左右間距6/10格,上下間距16/10格。

我們再來去掉這些干擾點,可以看得更清晰些:


php如何制作的簡單驗證碼識別代碼

是不是很清晰了?可能還是有人會問,你講這么多到底要怎么才能知道圖片上的數字是多少.

好吧,說下我的思路,我們將剛剛的換為0和1,而這些數字形狀是固定的,這樣就可以得到0-9每一個字的每一個區域8*10都有0和1組成了,

php如何制作的簡單驗證碼識別代碼

我們再來進行每8個切分,去掉4格間距,循環得出0-9的01組合值:

php如何制作的簡單驗證碼識別代碼

$dic = array(
 '00011000001111000110011011000011110000111100001111000011011001100011110000011000' => 0,
 '00011000001110000111100000011000000110000001100000011000000110000001100001111110' => 1,
 '00111100011001101100001100000011000001100000110000011000001100000110000011111111' => 2,
 '01111100110001100000001100000110000111000000011000000011000000111100011001111100' => 3,
 '00000110000011100001111000110110011001101100011011111111000001100000011000000110' => 4,
 '11111110110000001100000011011100111001100000001100000011110000110110011000111100' => 5,
 '00111100011001101100001011000000110111001110011011000011110000110110011000111100' => 6,
 '11111111000000110000001100000110000011000001100000110000011000001100000011000000' => 7,
 '00111100011001101100001101100110001111000110011011000011110000110110011000111100' => 8,
 '00111100011001101100001111000011011001110011101100000011010000110110011000111100' => 9
);

得出這10個后組合成數組,每次解析圖片RGB換成對應數組值就得到驗證碼值了。下面來演示下:

php如何制作的簡單驗證碼識別代碼

最后為了準確性,取100個循環看看:

php如何制作的簡單驗證碼識別代碼

哈哈,準確率100%

寫在最后

本文的目的是為了讓WEB開發者在生成驗證碼時注意安全,請勿用于非法目的.

代碼已在github:

感謝各位的閱讀,以上就是“php如何制作的簡單驗證碼識別代碼”的內容了,經過本文的學習后,相信大家對php如何制作的簡單驗證碼識別代碼這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

泰顺县| 多伦县| 深州市| 安宁市| 和田县| 礼泉县| 凯里市| 安丘市| 田东县| 涟水县| 澄江县| 漳州市| 龙里县| 亳州市| 治多县| 松江区| 会同县| 车险| 平塘县| 阿拉善右旗| 三门县| 靖远县| 德兴市| 乐业县| 梧州市| 阿克苏市| 西青区| 邵武市| 苏州市| 凌海市| 平遥县| 界首市| 介休市| 时尚| 南岸区| 巴东县| 东乌珠穆沁旗| 苍山县| 陈巴尔虎旗| 吉林省| 仁化县|