java图形验证码工具类

来源:互联网 发布:企业名录搜索软件 编辑:程序博客网 时间:2024/05/18 11:50
/*** @ClassName: ValidateCodeHelper* @Description: 关于java图形验证码的工具类* 这是一个验证码工具类,直接复制粘贴即可用* @author 没有水的鱼* @date 2016年10月10日10:43:48 * @version 1.0 */public class ValidateCodeHelper{    /*     * 随机数(去除0、o这种相似字符)     */    private static Random random = new Random();    /*     * 随机字符字典     */    private static final char[] CHARS = { '2', '3', '4', '5', '6', '7', '8',        '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M',        'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };    /*     * 获取4位随机数(修改循环次数,即可修改生成的随机数位数)     */    public static String getRandomString()    {        StringBuffer buffer = new StringBuffer();        for(int i = 0; i < 4; i++)        {            buffer.append(CHARS[random.nextInt(CHARS.length)]);        }        return buffer.toString();    }    /*     * 获取随机数颜色     */    private static Color getRandomColor()    {        return new Color(random.nextInt(255),random.nextInt(255),                random.nextInt(255));    }    /*     * 返回某颜色的反色     */    private static Color getReverseColor(Color c)    {        return new Color(255 - c.getRed(), 255 - c.getGreen(),                255 - c.getBlue());    }    /**     * @功能描述 获取验证码功能     * @开发人员 没有水的鱼     * @方法参数 需要生成的随机数     * @开发时间 2016年9月13日11:25:36     * @修改时间 2016年9月13日11:30:39     * @返回值 CommonResult     */    public byte[] generateVerificationCode(String randomString)throws Exception {        byte[] be = null;        int width = 90;        int height = 30;        //以下两行Color是随机颜色的,生成的验证码不是美观。//        Color color = getRandomColor();//        Color reverse = getReverseColor(color);        //这里我写了个固定背景颜色的Color,个人感觉还可以.        Color color = new Color(255,255,255);        Color reverse = new Color(42,145,0);        BufferedImage bi = new BufferedImage(width, height,                BufferedImage.TYPE_INT_RGB);        Graphics2D g = bi.createGraphics();        //消除线条锯齿        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);        //设置字体样式        g.setFont(new Font(Font.DIALOG, Font.PLAIN, 24));        //设置字体颜色        g.setColor(color);        //设置边框宽度        g.fillRect(0, 0, width, height);        //设置背景色        g.setColor(reverse);        //设置验证码在图形当中的位置高低        g.drawString(randomString, 15, 23);        //设置干扰线        for (int i = 0; i < 8; i++)         {            g.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)));            //画线            g.drawLine(random.nextInt(70), random.nextInt(40), random.nextInt(100), random.nextInt(30));        }        g.dispose();        ByteArrayOutputStream bs = new ByteArrayOutputStream();        ImageOutputStream imOut;        imOut = ImageIO.createImageOutputStream(bs);        ImageIO.write(bi, "jpg",imOut);        InputStream inpitstram= new ByteArrayInputStream(bs.toByteArray());        //由于项目特殊性需要故将InputStream 转换成了byte[]的格式。        be = UsercenterHelper.input2byte(inpitstram);        return be;    }}

转载请注明出处。

0 0