Maison  >  Article  >  Java  >  Exemple de code d'implémentation du code de vérification d'image en Java

Exemple de code d'implémentation du code de vérification d'image en Java

Y2J
Y2Joriginal
2017-04-26 13:35:561337parcourir

Code d'implémentation du code de vérification d'image Java, les amis dans le besoin peuvent s'y référer

Le code est le suivant :

makeCertPic.java
  package pic;
  import java.awt.Color;
  import java.awt.Font;
  import java.awt.Graphics;
  import java.awt.image.BufferedImage;
  import java.io.IOException;
  import java.io.OutputStream;
  import java.util.Random;
  import javax.imageio.ImageIO;
  /**
   * @author dzy
   * 生成验证码图片
   */
  public class makeCertPic {
    //验证码图片中可以出现的字符集,可根据需要修改
    private char mapTable[]={
       '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'};
    /**
    * 功能:生成彩色验证码图片
    * 参数width为生成图片的宽度,参数height为生成图片的高度,参数os为页面的输出流
    */
   public String getCertPic(int width, int height, OutputStream os) {
   if(width<=0)width=60;
   if(height<=0)height=20; 
   BufferedImage image = new BufferedImage(width, height, 
      BufferedImage.TYPE_INT_RGB); 
   // 获取图形上下文 
   Graphics g = image.getGraphics(); 
   // 设定背景色 
   g.setColor(new Color(0xDCDCDC)); 
   g.fillRect(0, 0, width, height); 
   //画边框 
   g.setColor(Color.black); 
   g.drawRect(0,0,width-1,height-1); 
   // 取随机产生的认证码
   String strEnsure = "";
   // 4代表4位验证码,如果要生成更多位的认证码,则加大数值
   for(int i=0; i<4; ++i) {
strEnsure+=mapTable[(int)(mapTable.length*Math.random())];
   }  
   //   将认证码显示到图像中,如果要生成更多位的认证码,增加drawString语句
   g.setColor(Color.black); 
   g.setFont(new Font("Atlantic Inline",Font.PLAIN,18)); 
   String str = strEnsure.substring(0,1); 
   g.drawString(str,8,17); 
   str = strEnsure.substring(1,2); 
   g.drawString(str,20,15); 
   str = strEnsure.substring(2,3); 
   g.drawString(str,35,18);   
   str = strEnsure.substring(3,4); 
   g.drawString(str,45,15); 
   // 随机产生10个干扰点
   Random rand = new Random();
   for (int i=0;i<10;i++) { 
    int x = rand.nextInt(width); 
    int y = rand.nextInt(height); 
    g.drawOval(x,y,1,1); 
   } 
   // 释放图形上下文
   g.dispose();   
   try {
    // 输出图像到页面 
    ImageIO.write(image, "JPEG", os);
   } catch (IOException e) {
    return "";
   }  
   return strEnsure;
   }
  }

Dans la méthode getCertPic(), une instance de la mémoire L'image est d'abord créée Objet, puis obtenez l'objet de contexte graphique de cette image mémoire, puis utilisez cet objet de contexte pour dessiner l'arrière-plan et la bordure. Ensuite, 4 caractères du tableau mapTable[] sont générés aléatoirement pour former une chaîne comme chaîne de vérification et affichés dans la mémoire Afin de provoquer une certaine quantité d'interférences, 10 points d'interférence sont tirés au hasard si vous souhaitez augmenter la valeur. effet d'interférence, vous pouvez dessiner quelques points supplémentaires. La page
makeCertPic.jsp permet d'appeler le JavaBean qui génère l'image du code de vérification et l'affiche sur le client. Le code source est le suivant :
MakeCertPic.jsp

Le. Le code est le suivant :

<%@page contentType="image/jpeg" %>  <jsp:useBean id="image" scope="page" class="pic.makeCertPic" />  <%  String str=image.getCertPic(0,0,response.getOutputStream());     // 将认证码存入SESSION  session.setAttribute("certCode", str);
  out.clear();   out = pageContext.pushBody();  %>

Le code de vérification généré est écrit ici sous forme de variable de session, donc dans la page de données qui reçoit les entrées de la page de connexion, le code de vérification saisi par l'utilisateur peut être comparé à cette variable de session. Si elles sont identiques, la vérification est réussie.
LoginPic.jsp

Le code est le suivant :

 <%@ page contentType="text/html;charset=GB2312" %>
<script type="text/javascript">  function reloadcode(){                var verify=document.getElementById(&#39;code&#39;);                verify.setAttribute(&#39;src&#39;,&#39;makeCertPic.jsp?it=&#39;+Math.random());        }</script>  <html>   <head><title>登录页面</title></head>   <body>     <table align="center" border="0">   <tralign="center"><td><fontcolor="red"><html:errors/></font></td></tr>   <tr align="center"><td>系统登录</td></tr>   <form. action="loginCheck.jsp" method="post" focus="username">   <tr><td>用户名:<input type="text" name="username"/></td></tr>     <tr><td>密  码:<input type="password"name="password"/></td></tr>   <tr><td>验证码<img src="makeCertPic.jsp" id="code" onclick="reloadcode()" style="cursor: pointer;" alt="看不清楚,换一张"> </td></tr><tralign="left"><td>           <input type="submit" value="确定"/></td></tr>   </form>   </table>   </body>  </html>

Le fait que le code de vérification soit saisi correctement peut être vérifié par la déclaration suivante :

Le code est le suivant :

 String certCode=request.getParameter("certCode");
  if(certCode.equals((String)session.getAttribute("certCode")))
   out.print("验证码输入正确");
  else
   out.print("验证码输入错误");

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!

Déclaration:
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