中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中怎么隨機生成驗證碼圖片

發布時間:2021-08-06 16:28:55 來源:億速云 閱讀:126 作者:Leah 欄目:編程語言

java中怎么隨機生成驗證碼圖片,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

驗證碼

驗證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動區分計算機和人類的圖靈測試)的縮寫。由于計算機無法解答CAPTCHA的問題,所以回答出問題的用戶就可以被認為是人類。

作用

防止惡意破解密碼、刷票、論壇灌水、刷頁。

有效防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登錄嘗試,實際上使用驗證碼是現在很多網站通行的方式(比如招商銀行的網上個人銀行,百度社區),我們利用比較簡易的方式實現了這個功能。雖然登錄麻煩一點,但是對網友的密碼安全來說這個功能還是很有必要,也很重要。但我們還是 提醒大家要保護好自己的密碼 ,盡量使用混雜了數字、字母、符號在內的6位以上密碼,不要使用諸如1234之類的簡單密碼或者與用戶名相同、類似的密碼 ,免得你的賬號被人盜用給自己帶來不必要的麻煩。

驗證碼通常使用一些線條和一些不規則的字符組成,主要作用是為了防止一些黑客把密碼數據化盜取。

分類

現在常見的驗證碼主要有

gif驗證碼  手機短信驗證碼  手機語音驗證碼  視頻驗證碼

實例

這里只是用java生出一個驗證碼的圖片,并沒有在在網頁的操作

package com.xn; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Date; import java.util.Random;  /**  * 驗證碼生成工具類 *  * @leo  */ public class ValidateCode {  // 圖片的寬度。  private int width = 160;  // 圖片的高度。  private int height = 40;  // 驗證碼字符個數  private int codeCount = 5;  // 驗證碼干擾線數  private int lineCount = 150;  // 驗證碼  private String code = null;  // 驗證碼圖片Buffer  private BufferedImage buffImg = null;   // 驗證碼范圍,去掉0(數字)和O(拼音)容易混淆的(小寫的1和L也可以去掉,大寫不用了)  private char[] codeSequence = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',    'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',    'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9'};   /**   * 默認構造函數,設置默認參數   */  public ValidateCode() {   this.createCode();  }   /**   * @param width 圖片寬   * @param height 圖片高   */  public ValidateCode(int width, int height) {   this.width = width;   this.height = height;   this.createCode();  }   /**   * @param width  圖片寬   * @param height 圖片高   * @param codeCount 字符個數   * @param lineCount 干擾線條數   */  public ValidateCode(int width, int height, int codeCount, int lineCount) {   this.width = width;   this.height = height;   this.codeCount = codeCount;   this.lineCount = lineCount;   this.createCode();  }   public void createCode() {   int x = 0, fontHeight = 0, codeY = 0;   int red = 0, green = 0, blue = 0;    x = width / (codeCount + 2);//每個字符的寬度(左右各空出一個字符)   fontHeight = height - 2;//字體的高度   codeY = height - 4;    // 圖像buffer   buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);   Graphics2D g = buffImg.createGraphics();       /*// 將圖像背景填充為白色   g.setColor(Color.WHITE);   g.fillRect(0, 0, width, height);*/  // 增加下面代碼使得背景透明   buffImg = g.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);   g.dispose();   g = buffImg.createGraphics();   // 背景透明代碼結束      // 畫圖BasicStroke是JDK中提供的一個基本的畫筆類,我們對他設置畫筆的粗細,就可以在drawPanel上任意畫出自己想要的圖形了。   g.setColor(new Color(255, 0, 0));   g.setStroke(new BasicStroke(1f));   g.fillRect(128, 128, width, height);    // 生成隨機數   Random random = new Random();       //設置字體類型、字體大小、字體樣式     Font font = new Font("微軟雅黑",Font.PLAIN, fontHeight);   g.setFont(font);    for (int i = 0; i < lineCount; i++) {    // 設置隨機開始和結束坐標    int xs = random.nextInt(width);//x坐標開始    int ys = random.nextInt(height);//y坐標開始    int xe = xs + random.nextInt(width / 8);//x坐標結束    int ye = ys + random.nextInt(height / 8);//y坐標結束     // 產生隨機的顏色值,讓輸出的每個干擾線的顏色值都將不同。    red = random.nextInt(255);    green = random.nextInt(255);    blue = random.nextInt(255);    g.setColor(new Color(red, green, blue));    g.drawLine(xs, ys, xe, ye);   }    // randomCode記錄隨機產生的驗證碼   StringBuffer randomCode = new StringBuffer();   // 隨機產生codeCount個字符的驗證碼。   for (int i = 0; i < codeCount; i++) {    String strRand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);    // 產生隨機的顏色值,讓輸出的每個字符的顏色值都將不同。    red = random.nextInt(255);    green = random.nextInt(255);    blue = random.nextInt(255);    //指定某種顏色   //g.setColor(new Color(252, 145, 83));   g.setColor(new Color(red, green, blue));    g.drawString(strRand, (i + 1) * x, codeY);    // 將產生的四個隨機數組合在一起。    randomCode.append(strRand);   }   // 將四位數字的驗證碼保存到Session中。   code = randomCode.toString();  }   public void write(String path) throws IOException {   OutputStream sos = new FileOutputStream(path);   this.write(sos);  }   public void write(OutputStream sos) throws IOException {   ImageIO.write(buffImg, "png", sos);   sos.close();  }   public BufferedImage getBuffImg() {   return buffImg;  }   public String getCode() {   return code;  }   /**   * 測試函數,默認生成到d盤   * @param args   */  public static void main(String[] args) {   ValidateCode vCode = new ValidateCode(160,40,5,150);   try {    String path="D:/"+new Date().getTime()+".png";    System.out.println(vCode.getCode()+" >"+path);    vCode.write(path);   } catch (IOException e) {    e.printStackTrace();   }  } }

看完上述內容,你們掌握java中怎么隨機生成驗證碼圖片的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

禹州市| 曲阜市| 成武县| 响水县| 凤冈县| 民和| 太保市| 萍乡市| 涡阳县| 城口县| 镇巴县| 南充市| 常山县| 太谷县| 神木县| 阜宁县| 浑源县| 韶山市| 崇仁县| 班玛县| 安阳市| 个旧市| 右玉县| 潮州市| 温宿县| 和林格尔县| 南康市| 九龙坡区| 乐东| 阿拉尔市| 通河县| 巢湖市| 肥西县| 洞口县| 封开县| 桃源县| 庆云县| 高安市| 永吉县| 旬邑县| 新干县|