Maison > Java > javaDidacticiel > le corps du texte

Exemple complet de fonction de code de vérification aléatoire (implémentation Java)

PHPz
Libérer: 2017-05-01 14:54:39
original
1555 Les gens l'ont consulté

Cet article présente principalement des informations pertinentes sur des exemples simples d'implémentation de la fonction de code de vérification aléatoire en Java. Les amis qui en ont besoin peuvent s'y référer

Exemple simple d'implémentation de la fonction de code de vérification aléatoire en Java

De nombreux systèmes disposent désormais de fonctions de code aléatoire ajoutées aux modules d'inscription, de connexion ou de publication d'informations 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 les caractères sur les images doivent être soumis en même temps lors de l'opération de soumission, si les caractères soumis le sont. différentes de celles enregistrées dans la session du serveur, 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.

Ici, nous utilisons un servlet pour implémenter le code de vérification aléatoire.

Code d'implémentation :

package com.servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 生成随机验证码
 * @author bitiliu
 *
 */
public class ValidateCodeServlet extends HttpServlet 
{

 private static final long serialVersionUID = 1L;
 
 //验证码图片的宽度。
  private int width=60;
  //验证码图片的高度。
  private int height=20;
  //验证码字符个数
  private int codeCount=4;
  
  
  private int x=0;
  //字体高度
  private int fontHeight;  
  private int codeY;
  
  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' };
  
  /**
   * 初始化验证图片属性
   */
  public void init() throws ServletException
 {
   //从web.xml中获取初始信息
   //宽度
 String strWidth=this.getInitParameter("width");
 //高度
 String strHeight=this.getInitParameter("height");
 //字符个数
 String strCodeCount=this.getInitParameter("codeCount"); 
 
 //将配置的信息转换成数值
 try
 {
  if(strWidth!=null && strWidth.length()!=0)
  {
  width=Integer.parseInt(strWidth);
  }
  if(strHeight!=null && strHeight.length()!=0)
  {
  height=Integer.parseInt(strHeight);
  }
  if(strCodeCount!=null && strCodeCount.length()!=0)
  {
  codeCount=Integer.parseInt(strCodeCount);
  }
 }
 catch(NumberFormatException e)
 {}
 
 x=width/(codeCount+1);
 fontHeight=height-2;
 codeY=height-4;
 
 }
  
  protected void service(HttpServletRequest req, HttpServletResponse resp)
  throws ServletException, java.io.IOException {
   
   //定义图像buffer
 BufferedImage buffImg = new BufferedImage(
width, height,BufferedImage.TYPE_INT_RGB);
 Graphics2D g = buffImg.createGraphics();

 //创建一个随机数生成器类
 Random random = new Random();

 //将图像填充为白色
 g.setColor(Color.WHITE);
 g.fillRect(0, 0, width, height);

 //创建字体,字体的大小应该根据图片的高度来定。
 Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);
 //设置字体。
 g.setFont(font);

 //画边框。
 g.setColor(Color.BLACK);
 g.drawRect(0, 0, width - 1, height - 1);

 //随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
 g.setColor(Color.BLACK);
 for(int i = 0; i < 160; i++) 
 {
  int x = random.nextInt(width);
  int y = random.nextInt(height);
  int xl = random.nextInt(12);
  int yl = random.nextInt(12);
  g.drawLine(x, y, x + xl, y + yl);
 }

 //randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
 StringBuffer randomCode = new StringBuffer();
 int red = 0, green = 0, blue = 0;

 //随机产生codeCount数字的验证码。
 for (int i = 0; i < codeCount; i++) {
  //得到随机产生的验证码数字。
  String strRand = String.valueOf(codeSequence[random.nextInt(36)]);
  //产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
  red = random.nextInt(255);
  green = random.nextInt(255);
  blue = random.nextInt(255);

  //用随机产生的颜色将验证码绘制到图像中。
  g.setColor(new Color(red, green, blue));
  g.drawString(strRand, (i + 1) * x, codeY);

  //将产生的四个随机数组合在一起。
  randomCode.append(strRand);
 }
 // 将四位数字的验证码保存到Session中。
 HttpSession session = req.getSession();
 session.setAttribute("validateCode", randomCode.toString());

 // 禁止图像缓存。
 resp.setHeader("Pragma", "no-cache");
 resp.setHeader("Cache-Control", "no-cache");
 resp.setDateHeader("Expires", 0);

 resp.setContentType("image/jpeg");

 //将图像输出到Servlet输出流中。
 ServletOutputStream sos = resp.getOutputStream();
 ImageIO.write(buffImg, "jpeg", sos);
 sos.close();
 }

}
Copier après la connexion

Besoin de déclarer le servlet dans web.xml

<servlet>
 <servlet-name>ValidateCodeServlet</servlet-name>
 <servlet-class>com.servlet.ValidateCodeServlet</servlet-class>
 <init-param>
 <param-name>width</param-name>
 <param-value>200</param-value>
 </init-param>
 <init-param>
 <param-name>height</param-name>
 <param-value>80</param-value>
 </init-param>
 <init-param>
 <param-name>codeCount</param-name>
 <param-value>5</param-value>
 </init-param>
 </servlet>

 <servlet-mapping>  
 <servlet-name>ValidateCodeServlet</servlet-name>  
 <url-pattern>/validateCodeServlet</url-pattern>  
 </servlet-mapping>
Copier après la connexion

Doit être cité La page peut être écrite comme ceci :


<ccid_file values="validateCodeServlet" width="100/" />
Copier après la connexion

Après la soumission de l'utilisateur, le code de vérification saisi par l'utilisateur peut être comparé à la chaîne enregistrée dans la session pour obtenir l'effet de vérification.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!