M-LOG生成驗證碼辦法

[代碼] [Java]代碼 /**
 * 
 */
package org.mspring.platform.utils;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOE http://www.szhaoexport.com/linked/20130311.do xception;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;

/**
 * @author Gao Youbo
 * @since Feb 20, 2012
 */
public class ImageUtils {
    /**
     * 生成隨機驗證碼
     * 
     * @param outputStream
     *            輸出流
     * @param allowValidateString
     *            答應驗證碼中呈現的字符串
     * @return
     */
    public static String validateCode(OutputStream outputStream, String allowValidateString) {
        int width = 60;
        int height = 20;

        BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 緩衝區Image
        Graphics2D g = buffImg.createGraphics(); // 取得在緩衝區Image中擔任繪畫的目標(畫筆)他是Graphics的字類型

        // 創立一個隨機數生成器類。
        Random random = new Random();

        g.setColor(Color.decode("#ffffff"));
        g.fillRect(0, 0, width, height); // 畫一個填充的矩形佈景色彩爲白色

        // 創立字體,字體的鉅細大概依據圖畫的高度來定。
        Font font = new Font("Times New Roman", Font.PLAIN, 18);
        // 設置字體。
        g.setFont(font);

        // 畫邊框。
        // g.setColor(Color.blue);
        // g.drawRect(0, 0, width - 1, height - 1);

        // 隨機發生160條攪擾線,使圖象中的認證碼不易被其它程序探測到。
        g.setColor(Color.GRAY);
        for (int i = 0; i < 80; i  ) {
            int x = random.nextInt(width);
            int y = random.nextInt(height);
            int xl = random.nextInt(12);
            int yl = random.nextInt(12);
            g.drawLine(x, y, x   xl, y   yl);
        }

        // randomCode用於保管隨機發生的驗證碼,以便用戶登陸後進行驗證。
        StringBuffer randomCode = new StringBuffer();
        int red = 0, green = 0, blue = 0;

        // 隨機發生驗證碼。
        for (int i = 0; i < 4; i  ) {
            // 獲得隨機發生的驗證碼數字。
            int randomIndex = random.nextInt(allowValidateString.length());
            if (randomIndex == 0)
                randomIndex = 1;
            String strRand = allowValidateString.substring(randomIndex - 1, randomIndex);

            // 發生隨機的色彩重量來結構色彩值,這樣輸出的每位數字的色彩值都將不同。
            red = random.nextInt(110);
            green = random.nextInt(50);
            blue = random.nextInt(50);

            // 用隨機發生的色彩將驗證碼製做到圖畫中。
            g.setColor(new Color(red, green, blue));
            g.drawString(strRand, 13 * i   6, 16);

            // 將發生的四個隨機數組合在一塊兒。
            randomCode.append(strRand);
        }
        try {
            ImageIO.write(buffImg, "jpeg", outputStream);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return randomCode.toString();
    }
} http://www.fpfuzhou.com/linked/20130311.do
相關文章
相關標籤/搜索