隨機驗證碼程序
?
import
??java.awt.Color;
? import ??java.awt.Font;
? import ??java.awt.Graphics;
? import ??java.awt.image.BufferedImage;
? import ??java.io.IOException;
? import ??java.util.Random;
? import ??javax.servlet.Servlet;
? import ??javax.servlet.ServletException;
? import ??javax.servlet.http.HttpServlet;
? import ??javax.servlet.http.HttpServletRequest;
? import ??javax.servlet.http.HttpServletResponse;
? /** ? */ ? /** ?
?*?? @version ??????1.0
?*?? @author ???????baiyf
?? */ ?
?? public ??? class ??ValidateImg?? extends ??HttpServlet?? implements ??Servlet???{
????? public ??Color?getRandColor(? int ??fc,?? int ??bc)???{
????????Random?random?? = ??? new ??Random();
????????? if ??(fc?? > ??? 255 ?)
????????????fc?? = ??? 255 ?;
????????? if ??(bc?? > ??? 255 ?)
????????????bc?? = ??? 255 ?;
????????? int ??r?? = ??fc?? + ??random.nextInt(bc?? - ??fc);
????????? int ??g?? = ??fc?? + ??random.nextInt(bc?? - ??fc);
????????? int ??b?? = ??fc?? + ??random.nextInt(bc?? - ??fc);
????????? return ??? new ??Color(r,?g,?b);
????}?
?????? /** ? */ ? /** ?
????*?? @see ??javax.servlet.http.HttpServlet#void?(javax.servlet.http.HttpServletRequest,?javax.servlet.http.HttpServletResponse)
????? */ ?
????? public ??? void ??doGet(HttpServletRequest?req,?HttpServletResponse?resp)
????????? throws ??ServletException,?IOException???{
????????doPost(req,?resp);
????}?
?
?????? /** ? */ ? /** ?
????*?? @see ??javax.servlet.http.HttpServlet#void?(javax.servlet.http.HttpServletRequest,?javax.servlet.http.HttpServletResponse)
????? */ ?
????? public ??? void ??doPost(HttpServletRequest?req,?HttpServletResponse?resp)
????????? throws ??ServletException,?IOException???{
????????resp.setHeader(? " ?Pragma? " ?,?? " ?No-cache? " ?);
????????resp.setHeader(? " ?Cache-Control? " ?,?? " ?no-cache? " ?);
????????resp.setDateHeader(? " ?Expires? " ?,?? 0 ?);
? // ??在內存中創建圖象??
?????????? int ??width?? = ??? 90 ?,?height?? = ??? 40 ?;
????????BufferedImage?image?? = ?????? new ??BufferedImage(width,?height,?BufferedImage.TYPE_INT_RGB);
? // ??獲取圖形上下文??
?????????Graphics?g?? = ??image.createGraphics();
? // ??設定背景色??
?????????g.setColor(getRandColor(? 180 ?,?? 250 ?));
????????g.fillRect(? 0 ?,?? 0 ?,?width,?height);
????????
????????Random?random?? = ??? new ??Random();????
????????
????????? // ?生成干擾橢圓?????
??????????? for ??(? int ??i?? = ??? 0 ?;?i?? < ??? 5 ?;?i? ++ ?)???{
????????????g.setColor(getRandColor(? 50 ?,?? 100 ?));
????????????? int ??x?? = ??random.nextInt(width);
????????????? int ??y?? = ??random.nextInt(height);
????????????g.drawOval(x,?y,?? 4 ?,?? 4 ?);
????????}?
?
????????g.setFont(? new ??Font(? "" ?,?Font.PLAIN,?? 40 ?));
????????String?sRand?? = ??? "" ?;
????????? for ??(? int ??i?? = ??? 0 ?;?i?? < ??? 4 ?;?i? ++ ?)???{
????????? // ??取隨機產生的認證碼(4位數字)??
?????????????String?rand?? = ??String.valueOf(random.nextInt(? 10 ?));
????????????sRand?? += ??rand;
????????? // ??隨機產生顏色?????
?????????????g.setColor(
????????????????? new ??Color(
????????????????????? 20 ??? + ??random.nextInt(? 80 ?),
????????????????????? 20 ??? + ??random.nextInt(? 100 ?),
????????????????????? 20 ??? + ??random.nextInt(? 90 ?)));
????????? // ??畫數字?
?????????????g.drawString(rand,?(? 17 ??? + ??random.nextInt(? 3 ?))?? * ??i?? + ??? 8 ?,?? 34 ?);
????? // ?生成干擾線?
??????????????? for ??(? int ??k?? = ??? 0 ?;?k?? < ??? 12 ?;?k? ++ ?)???{
????????????????? int ??x?? = ??random.nextInt(width);
????????????????? int ??y?? = ??random.nextInt(height);
????????????????? int ??xl?? = ??random.nextInt(? 9 ?);
????????????????? int ??yl?? = ??random.nextInt(? 9 ?);
????????????????g.drawLine(x,?y,?x?? + ??xl,?y?? + ??yl);
????????????}?
????????}?
????????req.getSession().setAttribute(? " ?rand? " ?,sRand);
????????g.dispose();
????????javax.imageio.ImageIO.write(image,?? " ?JPEG? " ?,?resp.getOutputStream());
????}?
}?
? import ??java.awt.Font;
? import ??java.awt.Graphics;
? import ??java.awt.image.BufferedImage;
? import ??java.io.IOException;
? import ??java.util.Random;
? import ??javax.servlet.Servlet;
? import ??javax.servlet.ServletException;
? import ??javax.servlet.http.HttpServlet;
? import ??javax.servlet.http.HttpServletRequest;
? import ??javax.servlet.http.HttpServletResponse;
? /** ? */ ? /** ?
?*?? @version ??????1.0
?*?? @author ???????baiyf
?? */ ?
?? public ??? class ??ValidateImg?? extends ??HttpServlet?? implements ??Servlet???{
????? public ??Color?getRandColor(? int ??fc,?? int ??bc)???{
????????Random?random?? = ??? new ??Random();
????????? if ??(fc?? > ??? 255 ?)
????????????fc?? = ??? 255 ?;
????????? if ??(bc?? > ??? 255 ?)
????????????bc?? = ??? 255 ?;
????????? int ??r?? = ??fc?? + ??random.nextInt(bc?? - ??fc);
????????? int ??g?? = ??fc?? + ??random.nextInt(bc?? - ??fc);
????????? int ??b?? = ??fc?? + ??random.nextInt(bc?? - ??fc);
????????? return ??? new ??Color(r,?g,?b);
????}?
?????? /** ? */ ? /** ?
????*?? @see ??javax.servlet.http.HttpServlet#void?(javax.servlet.http.HttpServletRequest,?javax.servlet.http.HttpServletResponse)
????? */ ?
????? public ??? void ??doGet(HttpServletRequest?req,?HttpServletResponse?resp)
????????? throws ??ServletException,?IOException???{
????????doPost(req,?resp);
????}?
?
?????? /** ? */ ? /** ?
????*?? @see ??javax.servlet.http.HttpServlet#void?(javax.servlet.http.HttpServletRequest,?javax.servlet.http.HttpServletResponse)
????? */ ?
????? public ??? void ??doPost(HttpServletRequest?req,?HttpServletResponse?resp)
????????? throws ??ServletException,?IOException???{
????????resp.setHeader(? " ?Pragma? " ?,?? " ?No-cache? " ?);
????????resp.setHeader(? " ?Cache-Control? " ?,?? " ?no-cache? " ?);
????????resp.setDateHeader(? " ?Expires? " ?,?? 0 ?);
? // ??在內存中創建圖象??
?????????? int ??width?? = ??? 90 ?,?height?? = ??? 40 ?;
????????BufferedImage?image?? = ?????? new ??BufferedImage(width,?height,?BufferedImage.TYPE_INT_RGB);
? // ??獲取圖形上下文??
?????????Graphics?g?? = ??image.createGraphics();
? // ??設定背景色??
?????????g.setColor(getRandColor(? 180 ?,?? 250 ?));
????????g.fillRect(? 0 ?,?? 0 ?,?width,?height);
????????
????????Random?random?? = ??? new ??Random();????
????????
????????? // ?生成干擾橢圓?????
??????????? for ??(? int ??i?? = ??? 0 ?;?i?? < ??? 5 ?;?i? ++ ?)???{
????????????g.setColor(getRandColor(? 50 ?,?? 100 ?));
????????????? int ??x?? = ??random.nextInt(width);
????????????? int ??y?? = ??random.nextInt(height);
????????????g.drawOval(x,?y,?? 4 ?,?? 4 ?);
????????}?
?
????????g.setFont(? new ??Font(? "" ?,?Font.PLAIN,?? 40 ?));
????????String?sRand?? = ??? "" ?;
????????? for ??(? int ??i?? = ??? 0 ?;?i?? < ??? 4 ?;?i? ++ ?)???{
????????? // ??取隨機產生的認證碼(4位數字)??
?????????????String?rand?? = ??String.valueOf(random.nextInt(? 10 ?));
????????????sRand?? += ??rand;
????????? // ??隨機產生顏色?????
?????????????g.setColor(
????????????????? new ??Color(
????????????????????? 20 ??? + ??random.nextInt(? 80 ?),
????????????????????? 20 ??? + ??random.nextInt(? 100 ?),
????????????????????? 20 ??? + ??random.nextInt(? 90 ?)));
????????? // ??畫數字?
?????????????g.drawString(rand,?(? 17 ??? + ??random.nextInt(? 3 ?))?? * ??i?? + ??? 8 ?,?? 34 ?);
????? // ?生成干擾線?
??????????????? for ??(? int ??k?? = ??? 0 ?;?k?? < ??? 12 ?;?k? ++ ?)???{
????????????????? int ??x?? = ??random.nextInt(width);
????????????????? int ??y?? = ??random.nextInt(height);
????????????????? int ??xl?? = ??random.nextInt(? 9 ?);
????????????????? int ??yl?? = ??random.nextInt(? 9 ?);
????????????????g.drawLine(x,?y,?x?? + ??xl,?y?? + ??yl);
????????????}?
????????}?
????????req.getSession().setAttribute(? " ?rand? " ?,sRand);
????????g.dispose();
????????javax.imageio.ImageIO.write(image,?? " ?JPEG? " ?,?resp.getOutputStream());
????}?
}?