我新手用到这块。用户登录验证码如何实现?求大神讲解下。有详细代码及注释的更好

解决方案 »

  1.   


    <%@ page language="java" import="java.util.*" import="java.awt.*,java.awt.image.*,com.sun.image.codec.jpeg.*" %>
        <%!
            Color getColor(int a,int b){
              int n=b-a;
              Random rd=new Random();
              int cr=a+rd.nextInt(n);
              int cg=a+rd.nextInt(n);
              int cb=a+rd.nextInt(n);
              return new Color(cr,cg,cb);
            }
        %><%
           response.setHeader("Pragma","No-cache");
           response.setHeader("Cache-Control","no-cache");
           response.setDateHeader("Expires",0);
           
           int width=60,height=20;
           BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
           Graphics g=image.getGraphics();
           Random random=new Random();
           g.setColor(getColor(200,250));
           g.fillRect(0,0,width,height);
           g.setFont(new Font("Times New Roman",Font.BOLD,18));
           g.setColor(getColor(160,200));
           for(int i=0;i<160;i++){
             int x=random.nextInt(width);
             int y=random.nextInt(height);
             int x1=random.nextInt(12);
             int y1=random.nextInt(12);
             g.drawLine(x,y,x+x1,y+y1);
           }
           String number=String.valueOf(1000+random.nextInt(8999));
           String name=request.getParameter("name");
           session.setAttribute("name",number);
           g.setColor(getColor(20,130));
           int x=(int)(width*0.2);
           int y=(int)(height*0.8);
           g.drawString(number,x,y);
           g.dispose();
                 
           JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(response.getOutputStream());
           out.clear();
           out = pageContext.pushBody();
           encoder.encode(image);
           out.close();        
        %>