Heim  >  Artikel  >  Backend-Entwicklung  >  PHP implementiert eine einfache Bestätigungscode-Erkennung, sehr detailliert!

PHP implementiert eine einfache Bestätigungscode-Erkennung, sehr detailliert!

藏色散人
藏色散人nach vorne
2020-07-24 14:22:234921Durchsuche

Ich wollte das schon immer schreiben, aber nach langer Zeit bekam ich Interesse und beschloss, es aufzunehmen.

Bestätigungscode

Der vollständig automatisierte öffentliche Turing-Test zur Unterscheidung von Computern und Menschen (CAPTCHA), allgemein bekannt als CAPTCHA, ist ein vollständig automatisierter öffentlicher Turing-Test zur Unterscheidung von Computern und Menschen automatisches Programm, das Benutzer von Computern und Menschen unterscheidet. Bei einem CAPTCHA-Test generiert der Computer als Server automatisch eine Frage, die der Benutzer beantworten muss. Diese Frage kann von einem Computer generiert und beurteilt werden, aber nur ein Mensch kann sie beantworten. Da Computer keine CAPTCHA-Fragen beantworten können, kann der Benutzer, der die Fragen beantwortet, als Mensch betrachtet werden.
Einführung in die Enzyklopädie

Einfach ausgedrückt handelt es sich um zufällig generierte Zeichen, die auf einem Bild ausgegeben werden [andere Formen von Drag-and-Drop/SMS-Bestätigungscodes usw. werden hier nicht berücksichtigt].

Häufige Typen

PHP implementiert eine einfache Bestätigungscode-Erkennung, sehr detailliert!

Ideen

Dieser Artikel dient nur zu Demonstrationszwecken, daher der erste Bildbestätigungscode wird als Beispiel zur Erläuterung herangezogen.
PHP implementiert eine einfache Bestätigungscode-Erkennung, sehr detailliert!

Jeder Punkt auf dem Bild hat seinen RGB-Wert, der über den Farbwähler ermittelt werden kann. Mit bloßem Auge ist der Verifizierungscode zu erkennen Das Bild ist ein rein digitaler Volltonhintergrund

PHP implementiert eine einfache Bestätigungscode-Erkennung, sehr detailliert!

Über den Farbwähler ist ersichtlich, dass der RGB-Wert die Hintergrundfarbe der Verifizierung ist Code ist (212.214.204)

Erfolg

Lassen Sie uns die imagecolorsforindex-Funktion von PHP verwenden, um die RGB-Werte aller Punkte im Bild zu erhalten:

$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[&#39;1&#39;];for ($i = 0; $i < $hid; ++ $i) {    for ($j = 0; $j < $wid; ++ $j) {
        $rgb = imagecolorat($res, $j, $i);
        $rgbArray[$i][$j] = imagecolorsforindex($res, $rgb);
    }
}

Die Ergebnisse sind wie folgt folgt:

PHP implementiert eine einfache Bestätigungscode-Erkennung, sehr detailliert!


Vielleicht möchten Sie fragen, wozu das dient? Ändern wir die Art und Weise, wie die Daten angezeigt und ausgegeben werden für die Hintergrundfarbe und Ausgabe für den Verifizierungscodebereich, schauen wir uns noch einmal um:

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

Effekt:
PHP implementiert eine einfache Bestätigungscode-Erkennung, sehr detailliert!

Ist es jetzt ganz klar?

Aber Sie haben vielleicht noch Fragen. Obwohl Sie es sehen können, woher wissen Sie, wie viel es ist?

Lassen Sie es uns unten analysieren:
PHP implementiert eine einfache Bestätigungscode-Erkennung, sehr detailliert!
Jeder Bestätigungscode hat einen direkten Abstand von 4 Leerzeichen, links und rechts einen Abstand von 6/10 Leerzeichen und nach oben und unten einen Abstand von 16/10 Leerzeichen.

Lassen Sie uns diese Störstellen noch einmal entfernen, damit wir klarer sehen können:
PHP implementiert eine einfache Bestätigungscode-Erkennung, sehr detailliert!
Ist es vielleicht immer noch ganz klar, Sie haben das Wie gesagt? Können wir wissen, wie die Zahlen auf dem Bild lauten? sind festgelegt, so dass Sie jeden Bereich 8*10 jedes Wortes 0-9 erhalten können, das aus 0 und 1 besteht.


Lassen Sie uns jeweils 8 Schnitte machen, entfernen den 4-Gitter-Abstand und eine Schleife, um den 01-Kombinationswert von 0-9 zu erhalten: PHP implementiert eine einfache Bestätigungscode-Erkennung, sehr detailliert!


$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);
, um diese 10 in einem Array zu kombinieren, jedes Mal, wenn das RGB Wenn das Bild analysiert und durch den entsprechenden Array-Wert ersetzt wird, wird der Bestätigungscodewert erhalten. Lassen Sie uns unten demonstrieren: PHP implementiert eine einfache Bestätigungscode-Erkennung, sehr detailliert!

Nehmen Sie abschließend für die Genauigkeit 100 Schleifen und sehen Sie: PHP implementiert eine einfache Bestätigungscode-Erkennung, sehr detailliert!

Erkennung des Bestätigungscodes!


Haha, die Genauigkeit beträgt 100 %PHP implementiert eine einfache Bestätigungscode-Erkennung, sehr detailliert!Am Ende geschrieben

Der Zweck dieses Artikels ist um die WEB-Entwicklung zu ermöglichen. Bitte achten Sie bei der Generierung von Verifizierungscodes auf Sicherheit und verwenden Sie diese bitte nicht für illegale Zwecke

Der Code ist auf Github:https://github.com/chaclee/sf

Das obige ist der detaillierte Inhalt vonPHP implementiert eine einfache Bestätigungscode-Erkennung, sehr detailliert!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen