De nos jours, les modules d'enregistrement, de connexion ou de publication d'informations de nombreux systèmes ont ajouté des fonctions de code aléatoire pour éviter l'utilisation de programmes d'enregistrement automatique ou de programmes de publication automatique.
Le code de vérification sélectionne en fait certains caractères au hasard et les affiche sur la page sous forme d'images. Si vous téléchargez et soumettez le Tomato Garden, les informations soumises sont considérées comme invalides. Afin d'empêcher les programmes automatiques d'analyser et d'analyser les images, certaines lignes d'interférence sont généralement générées de manière aléatoire sur l'image ou les caractères sont déformés, ce qui rend la reconnaissance automatique plus difficile.
Copiez le code comme suit :
paquet com.servlet ;
importer java.awt.Color ;
importer java.awt.Font ;
importer java.awt.Graphics2D ;
importer java.awt.image.BufferedImage ;
importer java.util.Random ;
importer javax.imageio.ImageIO ;
importer javax.servlet.ServletException ;
importer javax.servlet.ServletOutputStream ;
importer javax.servlet.http.HttpServlet ;
importer javax.servlet.http.HttpServletRequest ;
importer javax.servlet.http.HttpServletResponse ;
importer javax.servlet.http.HttpSession ;
/**
* Générer un code de vérification aléatoire
* @auteur bitiliu
*
*/
la classe publique ValidateCodeServlet étend HttpServlet
{
privé statique final long serialVersionUID = 1L ;
//La largeur de l'image du code de vérification.
largeur int privée = 60 ;
//La hauteur de l'image du code de vérification.
hauteur int privée = 20 ;
//Le nombre de caractères dans le code de vérification
private int codeCount = 4 ;
entier privé x=0 ;
//hauteur de la police
private int fontHeight ;
code int privéY ;
char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W ',
'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9 ' } ;
/**
* Initialiser et vérifier les attributs de l'image
*/
public void init() lance ServletException
{
//Obtenir les informations initiales de web.xml
//largeur
String strWidth=this.getInitParameter("largeur");
//haut
String strHeight=this.getInitParameter("hauteur");
//Nombre de caractères
String strCodeCount=this.getInitParameter("codeCount");
//Convertir les informations configurées en valeurs numériques
essayer
{
si (strWidth!=null && strWidth.length()!=0)
{
width=Integer.parseInt(strWidth);
}
si (strHeight!=null && strHeight.length()!=0)
{
hauteur=Integer.parseInt(strHeight);
}
si (strCodeCount!=null && strCodeCount.length()!=0)
{
codeCount=Integer.parseInt(strCodeCount);
}
}
catch (NumberFormatException e)
{}
x=largeur/(codeCount+1);
fontHeight=hauteur-2;
codeY=hauteur-4 ;
}
service vide protégé (requête HttpServletRequest, resp HttpServletResponse)
lance ServletException, java.io.IOException {
//Définir le tampon d'image
BufferedImage buffImg = nouveau BufferedImage (
largeur, hauteur, BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
//Créer une classe génératrice de nombres aléatoires
Aléatoire aléatoire = nouveau Aléatoire();
//Remplir l'image de blanc
g.setColor(Color.WHITE);
g.fillRect(0, 0, largeur, hauteur);
//Créer une police La taille de la police doit être déterminée en fonction de la hauteur de l'image.
Police font = new Font("Fixedsys", Font.PLAIN, fontHeight);
//Définit la police.
g.setFont(police);
//Dessine une bordure.
g.setColor(Color.BLACK);
g.drawRect(0, 0, largeur - 1, hauteur - 1);
// Générez aléatoirement 160 lignes d'interférence pour rendre le code d'authentification dans l'image difficile à détecter par d'autres programmes.