验证码生成

来源:互联网 发布:电脑软件证书过期 编辑:程序博客网 时间:2024/06/03 22:40
public class ValidImageUtils {    private static String codeChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";//随机码    private static String url = "H:\\files\\graph";//图片保存的服务器路径    public static ValidImage generateGraph()throws IOException{        // 获得验证码集合的长度        int charsLength = codeChars.length();        // 设置图形验证码的长和宽        int width = 90, height = 30;        BufferedImage image = new BufferedImage(width, height,                BufferedImage.TYPE_INT_RGB);        Graphics g = image.getGraphics();        Random random = new Random();        g.setColor(getRandomColor(180, 250));        g.fillRect(0, 0, width, height);        g.setFont(new Font("Times New Roman", Font.ITALIC, height));        g.setColor(getRandomColor(120, 180));        // 用户保存最后随机生成的验证码        StringBuffer validationCode = new StringBuffer();        // 验证码的随机字体        String[] fontNames = {"Times New Roman", "Book antiqua", "Arial"};        // 随机生成4个验证码        for (int i = 0; i < 4; i++) {            // 随机设置当前验证码的字符的字体            g.setFont(new Font(fontNames[random.nextInt(3)], Font.ITALIC,                    height));            // 随机获得当前验证码的字符            char codeChar = codeChars.charAt(random.nextInt(charsLength));            validationCode.append(codeChar);            // 随机设置当前验证码字符的颜色            g.setColor(getRandomColor(10, 100));            // 在图形上输出验证码字符,x和y都是随机生成的            g.drawString(String.valueOf(codeChar), 16 * i + random.nextInt(7),                    height - random.nextInt(6));        }        //todo 此为验证码数字表示        //todo 此为验证码图片url地址        String finalurl = UUID.randomUUID().toString();        finalurl = url + "\\" + finalurl + ".jpg";        //将图片存入服务器文件中        System.out.println(finalurl);        FileOutputStream fos = new FileOutputStream(new File(finalurl));        ImageIO.write(image, "JPEG", fos);        fos.flush();        fos.close();        ValidImage validImage=new ValidImage(validationCode.toString(),finalurl);        return validImage;    }    private static Color getRandomColor(int minColor, int maxColor) {        Random random = new Random();        if (minColor > 255) {            minColor = 255;        }        if (maxColor > 255) {            maxColor = 255;        }        //获得r的随机颜色值        int red = minColor + random.nextInt(maxColor - minColor);        int green = minColor + random.nextInt(maxColor - minColor);        int blue = minColor + random.nextInt(maxColor - minColor);        return new Color(red, green, blue);    }}