java实现简单验证码

之前有很多刚到公司的人问我在项目中使用的验证码的问题,都没有做出详细的解答,今天借着晚上空闲自己搞了个小例子给大家希望大家看的明白。
package com.kevin.common.util;  
  
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;  
  
public class Image {  
      
    //验证码图片中可以出现的字符集,可根据需要修改  
    private char mapTable[]={  
            'a','b','c','d','e','h',  
            'j','k','m','n','p','q',  
            'r','s','t','u','v','w',  
            'x','y','z','0','2','3',  
            '4','5','6','7','8','9'  
    };  
      
    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 random = new Random();  
         for(int i=0; i<10; i++ ) {  
             int x = random.nextInt(width);  
             int y = random.nextInt(height);  
             g.drawOval(x, y, 1, 1);  
         }  
         g.dispose();//释放图形上下文  
         try{
             ImageIO.write(image, "JPEG", os);//输出图像到页面
         }catch(IOException e) {  
             return "";  
         }  
        return strEnsure;  
    }  
}

测试通过。
很晚了,要休息了。有什么问题请即使留言给我。

你可能感兴趣的:(java,OS,J#)