Maison  >  Article  >  développement back-end  >  La signification et l'identification du code de vérification php

La signification et l'identification du code de vérification php

墨辰丷
墨辰丷original
2018-06-05 11:46:591637parcourir

Cet article présente principalement la signification et l'identification du code de vérification PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Code de vérification

Test de Turing public entièrement automatisé pour distinguer les ordinateurs des humains (CAPTCHA en abrégé), communément appelé vérification code, est un programme automatique public qui distingue les utilisateurs en tant qu'ordinateurs et humains. Dans le test CAPTCHA, l'ordinateur en tant que serveur génère automatiquement une question à laquelle l'utilisateur doit répondre. Cette question peut être générée et jugée par un ordinateur, mais seul un humain peut y répondre. Puisque les ordinateurs ne peuvent pas répondre aux questions CAPTCHA, l’utilisateur qui répond aux questions peut être considéré comme un humain.
Introduction à l'encyclopédie

Pour faire simple, il s'agit de caractères générés aléatoirement et affichés sur une image [les autres formes de codes de vérification par glisser-déposer/SMS, etc. ne sont pas prises en compte ici].

Types courants

Idées

Cet article est uniquement à des fins de démonstration, donc le premier code de vérification d'image est pris comme exemple pour expliquer.

Chaque point de l'image a sa valeur RVB, qui peut être obtenue grâce au sélecteur de couleurs. On peut voir à l'œil nu que le code de vérification de. l'image est une couleur unie numérique pure

On peut voir à partir du sélecteur de couleurs que la valeur RVB de la couleur d'arrière-plan du code de vérification est (212,214,204)

Réussite

Utilisons la fonction imagecolorsforindex de PHP pour obtenir les valeurs RVB de tous les points de l'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);
 }
}

Les résultats sont les suivants :

Vous voudrez peut-être demander à quoi ça sert ? changez la façon d'afficher les données, affichez pour la couleur d'arrière-plan et affichez la zone du code de vérification , jetons un coup d'oeil à nouveau :

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>";
}

Effet :

N'est-ce pas le cas ?

Mais vous avez peut-être encore des questions. Même si vous pouvez le voir, comment savoir combien c'est ?

Analysons-le ci-dessous :


La distance entre chaque code de vérification est de 4 espaces, l'espacement gauche et droit est de 6/10 espaces et l'espacement haut et bas est de 16/10 espaces.

Supprimons à nouveau ces points d'interférence pour que nous puissions y voir plus clair :



Est-ce que c'est très clair ? à quelqu'un là-bas, je vais demander, comment pouvez-vous savoir quels sont les chiffres sur la photo après avoir autant parlé

D'accord, laissez-moi vous dire mon idée. Remplaçons le et le tout à l'heure. avec 0 et 1. , et les formes de ces nombres sont fixes, vous pouvez donc obtenir 0-9. Chaque zone de chaque mot 8*10 est composée de 0 et 1,

<.>

Nous effectuons ensuite toutes les 8 divisions, supprimons l'espace de 4 espaces et effectuons une boucle pour obtenir la valeur de combinaison 01 de 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
);

Après avoir obtenu ces 10, ils sont combinés dans un tableau. Chaque fois que le RVB de l'image est analysé et remplacé par la valeur du tableau correspondante, la valeur du code de vérification est obtenue. . Démontrons ci-dessous :

Enfin, par souci de précision, prenez 100 boucles et voyez :


Résumé  : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

Méthode PHPExcel de lecture de fichiers Excel et exemples simples

Le framework PHP MVC skymvc prend en charge la méthode d'implémentation de téléchargement multi-fichiers

Une analyse simple des problèmes de calcul de longueur déroutants en PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn