Home > Article > Backend Development > The meaning and identification of php verification code
This article mainly introduces the meaning and identification of PHP verification code. Interested friends can refer to it. I hope it will be helpful to everyone.
Verification code
Completely Automated Public Turing test to tell Computers and Humans Apart (CAPTCHA for short), commonly known as verification code, is a public automatic program that distinguishes users as computers and humans. In a CAPTCHA test, the computer as the server automatically generates a question for the user to answer. This question can be generated and judged by a computer, but only a human can answer it. Since computers cannot answer CAPTCHA questions, the user who answers the questions can be considered a human.
Encyclopedia Introduction
To put it simply, it is randomly generated characters and output on a picture [other forms of drag and drop/SMS verification codes, etc. are not considered here].
Common types
Ideas
This article is for demonstration only, so the first picture verification code is taken As an example to explain.
Every point on the picture has its RGB value, which can be obtained through the color picker. It can be seen with the naked eye that the verification code of the picture is a pure digital solid color. Background
It can be seen through the color picker that the background color RGB value of the verification code is (212,214,204)
Implementation
Let’s use PHP’s imagecolorsforindex
function to obtain the RGB values of all points in the image:
$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); } }
Result As follows:
You may want to ask what is the use of this? Let's display the data in another way, output □
for the background color, and verify Code area output ■
, let’s look at it again:
for ($i = 0; $i < $hid; $i ++) { for ($j = 0; $j < $wid; $j ++) { if ($rgbArray[$i][$j]['red'] == 212) { echo '□'; } else { echo '■'; } } echo "<br>"; }
Effect:
Is it clear now?
But you may still have questions. Although you can see it, how do you know how much it is?
Let’s analyze it below:
The distance between each verification code is 4 spaces, the left and right spacing is 6/10 spaces, and the top and bottom spacing is 16/10 spaces.
Let’s remove these interference points again so that we can see more clearly:
Is it very clear? There may still be someone there I will ask, how can you know what the numbers on the picture are after you have talked so much.
Okay, let me tell you my thoughts. Let’s combine the □
and ■
Replace with 0 and 1, and the shapes of these numbers are fixed, so you can get that every area 8*10 of each word from 0-9 is composed of 0 and 1,
Let’s do every 8 segments again, remove the 4-space spacing, and loop to get the 01 combination value of 0-9:
##
$dic = array( '00011000001111000110011011000011110000111100001111000011011001100011110000011000' => 0, '00011000001110000111100000011000000110000001100000011000000110000001100001111110' => 1, '00111100011001101100001100000011000001100000110000011000001100000110000011111111' => 2, '01111100110001100000001100000110000111000000011000000011000000111100011001111100' => 3, '00000110000011100001111000110110011001101100011011111111000001100000011000000110' => 4, '11111110110000001100000011011100111001100000001100000011110000110110011000111100' => 5, '00111100011001101100001011000000110111001110011011000011110000110110011000111100' => 6, '11111111000000110000001100000110000011000001100000110000011000001100000011000000' => 7, '00111100011001101100001101100110001111000110011011000011110000110110011000111100' => 8, '00111100011001101100001111000011011001110011101100000011010000110110011000111100' => 9 );After getting these 10, they are combined into an array. Each time the RGB of the image is parsed and replaced with the corresponding array value, the verification code value is obtained. Let’s demonstrate below: Finally, for the sake of accuracy, take 100 loops and see:
##Summary: The above is the entire content of this article, I hope it will be helpful to everyone's study.
Related recommendations:
PHPExcel implementation of reading excel files and simple examplesPHP MVC framework skymvc supports multiple file upload implementation methodsA simple analysis of confusing length calculation issues in PHP
##
The above is the detailed content of The meaning and identification of php verification code. For more information, please follow other related articles on the PHP Chinese website!