Maison >développement back-end >tutoriel php >La signification et l'identification du code de vérification php
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]['red'] == 212) { echo '□'; } else { echo '■'; } } 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( '00011000001111000110011011000011110000111100001111000011011001100011110000011000' => 0, '00011000001110000111100000011000000110000001100000011000000110000001100001111110' => 1, '00111100011001101100001100000011000001100000110000011000001100000110000011111111' => 2, '01111100110001100000001100000110000111000000011000000011000000111100011001111100' => 3, '00000110000011100001111000110110011001101100011011111111000001100000011000000110' => 4, '11111110110000001100000011011100111001100000001100000011110000110110011000111100' => 5, '00111100011001101100001011000000110111001110011011000011110000110110011000111100' => 6, '11111111000000110000001100000110000011000001100000110000011000001100000011000000' => 7, '00111100011001101100001101100110001111000110011011000011110000110110011000111100' => 8, '00111100011001101100001111000011011001110011101100000011010000110110011000111100' => 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!