The meaning and identification of php verification code

墨辰丷
Release: 2023-03-29 19:22:02
Original
1635 people have browsed it

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);
 }
}
Copy after login

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][&#39;red&#39;] == 212) {
   echo &#39;□&#39;;
  } else {
   echo &#39;■&#39;;
  }
 }
 echo "<br>";
}
Copy after login

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(
 &#39;00011000001111000110011011000011110000111100001111000011011001100011110000011000&#39; => 0,
 &#39;00011000001110000111100000011000000110000001100000011000000110000001100001111110&#39; => 1,
 &#39;00111100011001101100001100000011000001100000110000011000001100000110000011111111&#39; => 2,
 &#39;01111100110001100000001100000110000111000000011000000011000000111100011001111100&#39; => 3,
 &#39;00000110000011100001111000110110011001101100011011111111000001100000011000000110&#39; => 4,
 &#39;11111110110000001100000011011100111001100000001100000011110000110110011000111100&#39; => 5,
 &#39;00111100011001101100001011000000110111001110011011000011110000110110011000111100&#39; => 6,
 &#39;11111111000000110000001100000110000011000001100000110000011000001100000011000000&#39; => 7,
 &#39;00111100011001101100001101100110001111000110011011000011110000110110011000111100&#39; => 8,
 &#39;00111100011001101100001111000011011001110011101100000011010000110110011000111100&#39; => 9
);
Copy after login

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 examples


PHP MVC framework skymvc supports multiple file upload implementation methods


A 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!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!