国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java驗證碼生成具體代碼

2019-11-26 14:25:16
字體:
來源:轉載
供稿:網友

本文實例為大家分享了java驗證碼生成的示例代碼,供大家參考,具體內容如下

package com.gonvan.component.captcha; import java.awt.*;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.HashMap;import java.util.Map;import java.util.Random; import javax.imageio.ImageIO;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession; /** * Created by yuerzm on 2016/3/14. */public class CaptchaFactory {   private static final char[]   CODE_SEQUENCE    = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"    .toCharArray();  private static final int    DEFAULT_WIDTH    = 60;  private static final int    DEFAULT_HEIGHT   = 20;  private static final int    DEFAULT_CODE_LEN  = 4;  private static final int    DEFAULT_CODE_X   = 13;  private static final int    DEFAULT_CODE_Y   = 16;  private static final int    DEFAULT_FONT_SIZE  = 18;  private static final String   DEFAULT_FONT_FAMILY = "Times New Roman";  private static CaptchaFactory  instance      = new CaptchaFactory();  private int           width        = DEFAULT_WIDTH;            // 定義圖片的width  private int           height       = DEFAULT_HEIGHT;            // 定義圖片的height  private int           length       = DEFAULT_CODE_LEN;           // 定義圖片上顯示驗證碼的個數  private int           xx         = DEFAULT_CODE_X;            // 定義圖片上顯示驗證碼x坐標  private int           yy         = DEFAULT_CODE_Y;            // 定義圖片上顯示驗證碼y坐標  private int           fontSize      = DEFAULT_FONT_SIZE;          // 定義圖片上顯示驗證碼的字體大小  private String         fontFamily     = DEFAULT_FONT_FAMILY;         // 定義圖片上顯示驗證碼的個數   private CaptchaFactory() {  }   public static CaptchaFactory getInstance() {    return instance;  }   /**   * 配置寬高   *   * @param w   * @param h   * @return   */  public CaptchaFactory configWidthAndHeight(int w, int h) {    instance.width = w;    instance.height = h;    return instance;  }   /**   * 配置坐標   *   * @param x   * @param y   * @return   */  public CaptchaFactory configXY(int x, int y) {    instance.xx = x;    instance.yy = y;    return instance;  }   /**   * 配置字體大小   *   * @param fontSize   * @return   */  public CaptchaFactory configFontSize(int fontSize) {    instance.fontSize = fontSize;    return instance;  }   /**   * 配置字體   *   * @param fontFamily   * @return   */  public CaptchaFactory configFontSize(String fontFamily) {    instance.fontFamily = fontFamily;    return instance;  }   public void write(HttpServletRequest request, HttpServletResponse response) throws IOException {    // 將四位數字的驗證碼保存到Session中。    Map captcha = generate();    String randomCode = (String) captcha.get("captchaCode");    BufferedImage buffImg = (BufferedImage) captcha.get("captchaImg");     HttpSession session = request.getSession();    session.setAttribute("code", randomCode);     // 禁止圖像緩存。    response.setHeader("Pragma", "no-cache");    response.setHeader("Cache-Control", "no-cache");    response.setDateHeader("Expires", 0);    response.setContentType("image/jpeg");     // 將圖像輸出到Servlet輸出流中。    ServletOutputStream outputStream = response.getOutputStream();    ImageIO.write(buffImg, "jpeg", outputStream);    outputStream.close();  }   public Map<String, Object> generate() throws IOException {    // 定義圖像buffer    BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);    Graphics gd = buffImg.getGraphics();    // 設定背景色    gd.setColor(getRandColor(200, 250));    gd.fillRect(0, 0, width, height);    // 設定字體,字體的大小應該根據圖片的高度來定。    gd.setFont(new Font(fontFamily, Font.PLAIN, fontSize));     // 創建一個隨機數生成器類    Random random = new Random();     // 隨機產生40條干擾線,使圖象中的認證碼不易被其它程序探測到。    gd.setColor(getRandColor(160, 200));    for (int i = 0; i < 155; i++) {      int x = random.nextInt(width);      int y = random.nextInt(height);      int xl = random.nextInt(12);      int yl = random.nextInt(12);      gd.drawLine(x, y, x + xl, y + yl);    }     // randomCode用于保存隨機產生的驗證碼,以便用戶登錄后進行驗證。    StringBuffer randomCode = new StringBuffer();    int red = 0, green = 0, blue = 0;     // 隨機產生 length 個驗證碼。    for (int i = 0; i < length; i++) {      // 得到隨機產生的驗證碼數字。      String code = String.valueOf(CODE_SEQUENCE[random.nextInt(36)]);      // 產生隨機的顏色分量來構造顏色值,這樣輸出的每位數字的顏色值都將不同。      red = random.nextInt(110);      green = random.nextInt(110);      blue = random.nextInt(110);       // 用隨機產生的顏色將驗證碼繪制到圖像中。      gd.setColor(new Color(red + 20, green + 20, blue + 20));      gd.drawString(code, i * xx + 6, yy);       // 將產生的隨機數組合在一起。      randomCode.append(code);    }    Map<String, Object> retval = new HashMap<>();    retval.put("captchaCode", randomCode.toString());    retval.put("captchaImg", buffImg);    return retval;  }   /**   * 給定范圍獲得隨機顏色   *   * @param fc   *      最小值   * @param bc   *      最大值   * @return Color   */  private 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);  }}

以上就是本文的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 留坝县| 革吉县| 大港区| 中卫市| 汾阳市| 大竹县| 罗田县| 金湖县| 平昌县| 遵义市| 湘乡市| 英山县| 得荣县| 美姑县| 东丰县| 大洼县| 铁岭县| 胶南市| 城步| 阿合奇县| 镇安县| 崇左市| 武安市| 仙居县| 伽师县| 新河县| 皋兰县| 松滋市| 营山县| 化州市| 剑河县| 新建县| 藁城市| 定安县| 天气| 菏泽市| 江北区| 陇西县| 长子县| 叶城县| 枝江市|