Perl CAPTCHA. Généré avec ImageMagick
Un captcha petite fonctionnalité de génération pour perl imagemagick en appelant une image de bibliothèque :: Magick.
Il peut être utile dans le cas où l'hébergeur ne permet pas d'établir leurs propres modules pour perl (par exemple GD :: SecurityImage ou Auchten :: Captcha). Module de travailler avec ImageMagick ne devrait pas défaut, sauf si un hôte très négligente.
Cette fonctionnalité peut être utilisée comme un appel de la bibliothèque, l'appel pour passer le nom du fichier et la ligne afin de générer un CAPTCHA.
#! / Usr / bin / perl # générateur de captcha. L'idée et les paramètres d'appel sont prises à partir Convertir captcha.ru (http://captcha.ru/captchas/multiswirl/). # La mise en œuvre d'une bibliothèque pour l'image :: Magick perl - dimio (www.dimio.org). # 27/09/2009 image utilisation :: Magick; sous CreateCapImage ($ $) {my ($ cap_string, $ filename) = @ _; my $ font = 'times.ttf'; my $ pointsize = 70; mon chemin $ = ' . / '; my $ image = new Image :: Magick; n ° 1. Créer une zone de 300x100 blanc. $ Image-> Set (taille => '300x100 '); $ image-> ReadImage («xc: blanc'); n ° 2. Nous imprimons en noir avec l'antialiasing $ image-> Set (type => 'TrueColor », antialias =>' True ', fill =>' noir ', la police # string $ string taille de la police $ font pointsize => $ police, pointsize => $ pointsize,); $ image-> Draw (primitif => 'texte', points => '20, 70 ', # orientation d'une ligne de texte dans le texte de l'image => $ cap_string, # que l'impression) # 3. Déplacer le centre à la gauche de 100 points de + de la fluctuation aléatoire de $ image-> Étendue (géométrie => '400x120 ', # changer la taille de l'image); $ image-> Rouleau (x => 101 + int (rand (4))) # 4. Le tourbillon d'abord à un angle aléatoire (37 à 51) $ image-> Swirl (degrés => int (rand (14)) 37,), n ° 5. Déplacer le centre vers la droite par 200 pixels, également avec une fluctuation aléatoire de $ image-> Étendue (géométrie => '600x140 ', # changer la taille de l'image); $ image-> Rouleau (x => 3-int (rand (4))) , n ° 6. La deuxième rotation (20 à 35) $ image-> Swirl (degrés => int (rand (15)), 20,,), N ° 7. Le traitement final et la sortie de $ image-> Rogner ('300x100 100 +17'); $ filename = $ path; $ image-> Redimensionner ('150x50 '). $ Filename =; $ nom_fichier '. Png. »; Ouvert (IMAGE,'> ', $ filename) or die $;! $ Image-> Write (fichier => \ * IMAGE, filename => $ filename); close ( IMAGE); return $ filename;} 1;
Challenge # Captcha du script mon num1 $ = int (rand (11)) + int (rand (3)); mon num2 $ = int (rand (8)) + int (rand (4)); my $ somme = $ num1 + num2 $; my $ = $ num1 cap_string '+' $ num2 '='...; my $ cap_digest = md5_hex ($ somme + rand (100) + rand (50)); mon cap_url $ = & CreateCapImage ($ cap_string, $ cap_digest); Cap_url $ = ~ s | / home / dimioorg / public_html / dimioorg | |; Cap_url $ = 'http://www.dimio.org' $ Cap_url.; print $ query-> em ("<img src=\"$cap_url\">"), $ Query-> textfield ( -Nom => 'cap_value », -Taille => 2, -Maxlength => 2, );
En conséquence, la page affichera une image avec des symboles de la forme "12 7 =". La ligne peut en principe être n'importe quoi.
Pour paresseux pour copier-coller - peut télécharger la fonction et trois police ttf captcha.pl .
Écrit sur les droits des sites pour vous-même, mais si quelqu'un peut venir dans maniable ![]()
Plus d'informations sur des sujets similaires:
Filed under: Internet , Codage |
Tags: captcha , procédures , imagemagick , perl , programmation |
10 commentaires 

Quelque chose ne fonctionne pas!
Photo - juste un rectangle blanc sans texte, puis
de se dandiner sur
print $ query-> em (""),
$ Query-> textfield (
-Nom => 'cap_value »,
-Taille => 2,
-Maxlength => 2,
);
avec un message
Impossible d'appeler la méthode "em" sur une valeur indéfinie dans / home / .......
Dans l'exemple illustré comme suit:
Et vous passez une chaîne vide.
Module CGI est relié par le chemin?
Comme pour l'image - d'abord - la police est correcte? Deuxièmement - vous pouvez faire pivoter les paramètres de génération. Je reçois une image normale d'un CAPTCHA lorsque ces paramètres dans l'exemple.
De toute évidence, cette coupe du code du moteur ...
Fabriqué comme suit:
$ Query = new CGI;
print $ query-> em (""),
$ Query-> textfield (
-Nom => 'cap_value »,
-Taille => 10,
-Maxlength => 5,
);
il a travaillé, mais l'image est vide
img src = \ "$ cap_url \" border = \ "2 \"
Géré pour vérifier sur le serveur: - .
Perl v5.8.8
ImageMagick 6.5.9-9 25/02/2010 Q16
Image :: Magick (6.005009)
tout comme le captcha ... ça marche.
et comment le vérifier et entrer l'utilisateur?
J'aurais pensé que quelques mots de hachage générées CAPTCHA et de hachage de la saisie de l'utilisateur, puis de les comparer. Module Digest :: MD5 pour vous aider.
Eh bien, je calcule le hachage de l'utilisateur sans aucun problème ... mais comme un hachage de captcha? il a déjà oublié, parce que travaillé sur le captcha sortie du script.) Oui, et Just Do It différents scripts peuvent être - on affiche le captcha, et celui qui prend l'entrée ... c'est zamorochki moi ici (
Captcha Hash mettre dans un fichier ou base de données d'autres (un fichier de plus logique et plus facile, mais si vous avez déjà une base de données pour le moteur - pourquoi ne pas créer une table là-bas), a passé (et si vous le souhaitez - pourris) hachages capture supprimé. Pour plus de commodité, vous pouvez attribuer un certains identificateurs CAPTCHA.