JAVA 일회용 이미지 인증 코드 생 성

현재 많은 곳 에서 인증 코드 로그 인 인증 을 써 야 합 니 다.이러한 장점 은 서버 의 압력 을 줄 일 수 있다 는 것 입 니 다.다음은 자바 로 일회용 로그 인 인증 코드 를 작성 하 는 것 입 니 다.
1.인증번호 생 성 클래스:
package com.easyteam;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;

public class ImageCode {
     int w=70;//  
     int h=35;//  
     Random r=new Random();
    
    public  BufferedImage CreateImage(){//       
        BufferedImage img=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);//         
        Graphics gps=img.getGraphics();//         
        
        gps.setColor(new Color(240,240,240));//    
        
        gps.fillRect(0, 0, w, h);//              (            )
        return img;
        
        
    }
    public   BufferedImage getImage(){//       
        BufferedImage img=CreateImage();
        Graphics gps=img.getGraphics();//         
        //     
        for(int i=0;i<4;i++){
            String ch=this.getContent();
            gps.setColor(this.getColor());
            gps.setFont(this.getFont());
            gps.drawString(ch, w/4*i, h-5);//        
        }
        drawLine(img);
        return img;
        
    }
    public  void saveImage(BufferedImage img,OutputStream out) throws  IOException {
        //              f ,                        :ImageIO.write(img,"JPEG",response.getOutputStream());
        
        ImageIO.write(img, "JPEG", new FileOutputStream("F:\\a.jpg"));
        
    }
    //             
    String str="abcdefghijklmnupqrstuvwxyzABCDEFGHIJKLMNUPQRSTUVWZYZ1234567890";
    public   String getContent(){
        int index=r.nextInt(str.length());
        return str.charAt(index)+"";
    }
     String[] font={"  ","    ","    ","  ","    "};//  
     int[] fontSize={24,25,26,27,28};//    
     int[] fontStyle={0,1,2,3};//    
    public   Font getFont(){
        int index1=r.nextInt(font.length);
        String name=font[index1];
        int style=r.nextInt(4);
        int index2=r.nextInt(fontSize.length);
        int size=fontSize[index2];
        return new Font(name,style,size);
    }
    public   Color getColor(){//       
        int R=r.nextInt(256);//     0-255
        int G=r.nextInt(256);
        int B=r.nextInt(256);
        return new Color(R,G,B);
    }
    public void drawLine(BufferedImage img){//    
        Graphics2D gs=(Graphics2D) img.getGraphics();
        gs.setColor(Color.BLACK);
        gs.setStroke(new BasicStroke(1.5F));//      
        for(int i=0;i<5;i++){//         ,         
            int x1=r.nextInt(w);
            int y1=r.nextInt(h);
            int x2=r.nextInt(w);
            int y2=r.nextInt(h);
            gs.drawLine(x1, y1, x2, y2);
                    
        }
    }
    
}

2.테스트 클래스:
package com.easyteam;

import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test {
      public static void main(String[] args) throws  IOException {
        ImageCode imagecode=new ImageCode();
        BufferedImage img=imagecode.getImage();
        imagecode.saveImage(img, new FileOutputStream("F:\\a.jpg"));
    }

}

실제 개발 에 서 는 그림 에 생 성 된 문 자 를 저장 한 뒤 세 션 대상 에 저장 해 야 한다.그림 을 얻 은 코드 를 변경 합 니 다.
public   BufferedImage getImage(){//       
        BufferedImage img=CreateImage();
        Graphics gps=img.getGraphics();//         
        StringBuilder sb=new StringBuilder();
        //     
        for(int i=0;i<4;i++){
            String ch=this.getContent();
            sb.append(ch);
            gps.setColor(this.getColor());
            gps.setFont(this.getFont());
            gps.drawString(ch, w/4*i, h-5);//        
        }
        //  Session   , sb  
        drawLine(img);
        return img;
        
    }

추가:개발 중 생 성 될 수 있 는 인증 코드 가 잘 보이 지 않 습 니 다.한 장 바 꿔 야 합 니 다.그러나 일부 브 라 우 저 는 캐 시 가 있어 새로 고침 할 수 없습니다.이때 자바 Sctipt 코드 를 써 서 해결 합 니 다.
<script type="text/javascript">
     function fun(){
       1.  id       
       2.          new Date().gettime();            ,           。
     }
</script>

좋은 웹페이지 즐겨찾기