java随机生成动态验证码

  为 了防止某些用户使用软件进行登录和发布信息,很多网站在用户登录或者发布信息时,都要求用户输入验证码。验证码通常是以一幅图片的形式显示的,用户按照图 片中显示的数字或者字母依次输入,服务端将对用户输入和验证码进行比较,以判断用户是否经过检验。由于验证码都是随机生成的,自动发布信息的软件无法知道 生成的验证码。

 

  1 生成图片的程序:
  2 /**/ /*
  3 * RandomCodeServlet.java
  4 *
  5 * Created on 2007-5-29, 0:51:02
  6 *
  7 * To change this template, choose Tools | Template Manager
  8 * and open the template in the editor.
  9 */

 10
 11 package  com.javahe.image;
 12
 13 /** */ /**
 14 *
 15 * @author java-he
 16 */

 17 import  java.awt.Color;
 18 import  java.awt.Font;
 19 import  java.awt.Graphics2D;
 20 import  java.awt.image.BufferedImage;
 21 import  java.util.Random;
 22 import  javax.imageio.ImageIO;
 23
 24 import  javax.servlet. * ;
 25 import  java.io. * ;
 26 import  javax.servlet.http. * ;
 27
 28 public   class  RandomCodeServlet  extends  HttpServlet  {
 29    //验证码图片的宽度。
 30    private int width=60;
 31    //验证码图片的高度。
 32    private int height=20;
 33    
 34    protected void service(HttpServletRequest req, HttpServletResponse resp)
 35            throws ServletException, java.io.IOException {
 36        BufferedImage buffImg=new BufferedImage(width,height,
 37                BufferedImage.TYPE_INT_RGB);
 38        Graphics2D g=buffImg.createGraphics();
 39        
 40        //创建一个随机数生成器类。
 41        Random random=new Random();
 42        
 43        g.setColor(Color.WHITE);
 44        g.fillRect(0,0,width,height);
 45        
 46        //创建字体,字体的大小应该根据图片的高度来定。
 47        Font font=new Font("Times New Roman",Font.PLAIN,18);
 48        //设置字体。
 49        g.setFont(font);
 50        
 51        //画边框。
 52        g.setColor(Color.BLACK);
 53        g.drawRect(0,0,width-1,height-1);
 54        
 55        //随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
 56        g.setColor(Color.GRAY);
 57        for (int i=0;i<160;i++{
 58            int x = random.nextInt(width);
 59            int y = random.nextInt(height);
 60            int xl = random.nextInt(12);
 61            int yl = random.nextInt(12);
 62            g.drawLine(x,y,x+xl,y+yl);
 63        }

 64        
 65        
 66        //randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
 67        StringBuffer randomCode=new StringBuffer();
 68        int red=0,green=0,blue=0;
 69        
 70        //随机产生4位数字的验证码。
 71        for (int i=0;i<4;i++{
 72            //得到随机产生的验证码数字。
 73            String strRand=String.valueOf(random.nextInt(10));
 74            
 75            //产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
 76            red=random.nextInt(110);
 77            green=random.nextInt(50);
 78            blue=random.nextInt(50);
 79            
 80            //用随机产生的颜色将验证码绘制到图像中。
 81            g.setColor(new Color(red,green,blue));
 82            g.drawString(strRand,13*i+6,16);
 83            
 84            //将产生的四个随机数组合在一起。
 85            randomCode.append(strRand);
 86        }

 87        //将四位数字的验证码保存到Session中。
 88        HttpSession session=req.getSession();
 89        session.setAttribute("randomCode",randomCode.toString());
 90        
 91        //禁止图像缓存。
 92        resp.setHeader("Pragma","no-cache");
 93        resp.setHeader("Cache-Control","no-cache");
 94        resp.setDateHeader("Expires"0);
 95        
 96        resp.setContentType("image/jpeg");
 97        
 98        //将图像输出到Servlet输出流中。
 99        ServletOutputStream sos=resp.getOutputStream();
100        ImageIO.write(buffImg, "jpeg",sos);
101        sos.close();
102    }

103}

104
105


 1 写好后在web.xml中添加对应的servlet。然后页面调用的时候用。
 2 <% @page contentType="text/html" %>
 3 <% @page pageEncoding="UTF-8" %>
 4 <% --
 5The taglib directive below imports the JSTL library. If you uncomment it,
 6you must also add the JSTL library to the project. The Add Library action
 7on Libraries node in Projects view can be used to add the JSTL 1.1 library.
 8--
%>
 9 <% --
10<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%>  
11 --%>
12 <%
13if(request.getParameter("random")!=null)
14{
15    if(request.getParameter("random").equals(session.getAttribute("randomCode")))
16    {
17        out.println("ok!");
18    }
19}
20
%>
21 <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
22 "http://www.w3.org/TR/html4/loose.dtd" >
23
24 < html >
25      < head >< title > 登录页面 </ title >
26      < body >
27          < form  method ="POST"  action ="index.jsp" >
28              < table >
29                  < tr >
30                      < td > 用户名: </ td >
31                      < td >< input  type ="text"  name ="username" ></ td >
32                  </ tr >
33                  < tr >
34                      < td > 密码: </ td >
35                      < td >< input  type ="password"  name ="password" ></ td >
36                  </ tr >
37                  < tr >
38                      < td > 验证码: </ td >
39                      < td >
40                          < input  type ="text"  name ="random"  maxlength ="4" >
41                      < img  src ="imgcode" >
42                      </ td >
43                  </ tr >
44                  < tr >
45                      < td >< input  type ="reset"  value ="重填" ></ td >
46                      < td >< input  type ="submit"  value ="提交" ></ td >
47                  </ tr >
48              </ table >
49          </ form >
50      </ body >
51 </ html >
52
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中生成随机短信验证码,可以使用以下代码: ```java import java.util.Random; public class SmsCodeGenerator { public static void main(String[] args) { int codeLength = 6; // 验证码的长度 String code = generateCode(codeLength); System.out.println("随机生成的短信验证码:" + code); } public static String generateCode(int length) { // 验证码字符集 String charset = "0123456789"; // 创建随机数生成器 Random random = new Random(); // 生成指定长度的验证码 StringBuilder codeBuilder = new StringBuilder(); for (int i = 0; i < length; i++) { int randomIndex = random.nextInt(charset.length()); char randomChar = charset.charAt(randomIndex); codeBuilder.append(randomChar); } return codeBuilder.toString(); } } ``` 上述代码中,我们首先定义了验证码的长度 `codeLength`,这里设置为 6。 然后,我们使用 `generateCode()` 方法生成指定长度的随机验证码。在该方法中,我们定义了验证码字符集 `charset`,其中包含了数字 0 到 9。 接下来,我们创建了一个随机数生成器 `random`,使用 `random.nextInt(charset.length())` 生成一个随机索引,然后从字符集中取出对应索引的字符,循环生成指定长度的验证码。 最后,我们将生成的验证码以字符串形式返回。 你可以在运行代码后,查看控制台输出的随机生成的短信验证码。 希望这个示例对你有帮助!如果你有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值