java 復雜驗證碼生成,java驗證碼生成種

java驗證碼生成類

package cn.edu.pdsu.action;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

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;

import org.apache.commons.lang.RandomStringUtils;

import org.apache.struts2.ServletActionContext;

/**

* 類說明:驗證碼類(將驗證碼信息寫入到session中 屬性“authCode”)

*

* @author 作者: LiuJunGuang

* @version 創建時間:2011-7-17 下午03:26:21

*/

public class AuthCodeAction {

private HttpServletResponse response = ServletActionContext.getResponse();

private HttpServletRequest request = ServletActionContext.getRequest();

public String execute() {

try {

int width = 50;

int height = 20;

// 取得一個4位隨機字母數字字符串

String s = RandomStringUtils.random(4, true, true);

// 保存入session,用于與用戶的輸入進行比較.

// 注意比較完之后清除session.

HttpSession session = request.getSession(true);

session.setAttribute("authCode", s);

response.setContentType("images/jpeg");//告知瀏覽器內容的類型

response.setHeader("Pragma", "No-cache");//HTTP 1.0版 不要緩存

response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1 不要緩存

response.setDateHeader("Expires", 0);//設置存活時間

ServletOutputStream out = response.getOutputStream();//得到響應輸出流

BufferedImage image = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

Graphics g = image.getGraphics();

// 設定背景色

g.setColor(getRandColor(200, 250));

g.fillRect(0, 0, width, height);

// 設定字體

Font mFont = new Font("Times New Roman", Font.BOLD, 18);// 設置字體

g.setFont(mFont);

// 畫邊框

// g.setColor(Color.BLACK);

// g.drawRect(0, 0, width - 1, height - 1);

// 隨機產生干擾線,使圖象中的認證碼不易被其它程序探測到

g.setColor(getRandColor(160, 200));

// 生成隨機類

Random random = new Random();

for (int i = 0; i < 125; i++) {

int x2 = random.nextInt(width);

int y2 = random.nextInt(height);

int x3 = random.nextInt(12);

int y3 = random.nextInt(12);

g.drawLine(x2, y2, x2 + x3, y2 + y3);

}

// 繪制一些長的干擾線

for (int i = 0; i < 5; i++) {

int y1 = random.nextInt(15) + 3;

g.drawLine(0, y1, width, y1);

g.setColor(getRandColor(10, 160));

}

// 將認證碼顯示到圖象中

g.setColor(new Color(20 + random.nextInt(110), 20 + random

.nextInt(110), 20 + random.nextInt(110)));

g.drawString(s, 2, 16);

// 圖象生效

g.dispose();

// 輸出圖象到頁面

ImageIO.write((BufferedImage) image, "JPEG", out);//將圖片以JPEG格式輸出到out輸出流中

out.close();

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

//獲得某一范圍的隨機顏色

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);

}

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271778.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271778.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271778.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電腦硬件:藍屏的常見解決方案

我們在使用電腦的時候經常會遇到電腦藍屏的故障&#xff0c;這個可以算是電腦故障最頻繁出現的一個了&#xff0c;今天給大家介紹一下電腦藍屏常見的處理辦法&#xff0c;希望能給大家帶來一些 幫助&#xff01; 1、電腦藍屏一般處理辦法 1、先了解發生藍屏前電腦的情況及所做的…

1、Canvas的基本用法

1、Canvas是什么&#xff1f; HTML5 的 canvas 元素使用 JavaScript 在網頁上繪制圖像。 畫布是一個矩形區域&#xff0c;您可以控制其每一像素。 canvas 擁有多種繪制路徑、矩形、圓形、字符以及添加圖像的方法。 2、創建 Canvas 元素 規定元素的 id、寬度和高度&#xff1a; …

用lambda表達式實現Runnable

用lambda表達式實現Runnable lambda表達式替換了原來匿名內部類的寫法&#xff0c;沒有了匿名內部類繁雜的代碼實現&#xff0c;而是突出了&#xff0c;真正的處理代碼。最好的示例就是 實現Runnable 的線程實現方式了: 用() -> {}代碼塊替代了整個匿名內部類 Test public …

java弱引用怎么手動釋放,十分鐘理解Java中的弱引用,十分鐘java引用

十分鐘理解Java中的弱引用&#xff0c;十分鐘java引用本篇文章嘗試從What、Why、How這三個角度來探索Java中的弱引用&#xff0c;幫助大家理解Java中弱引用的定義、基本使用場景和使用方法。由于個人水平有限&#xff0c;敘述中難免存在不準確或是不清晰的地方&#xff0c;希望…

軟件:推薦六款實用的錄頻軟件

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…

安裝 openSUSE Leap 42.1 之后要做的 8 件事

導讀openSUSE Leap 確實是個巨大的飛躍&#xff0c;它允許用戶運行一個和 SUSE Linux 企業版擁有同樣基因的發行版。和其它系統一樣&#xff0c;為了實現最佳的使用效果&#xff0c;在使用它之前需要做些優化設置。下面是一些我在我的電腦上安裝 openSUSE Leap 之后做的一些事情…

Java8 Stream Collectors groupingBy使用

分組List并顯示其總數。 Test public void test8() {//3 apple, 2 banana, others 1List<String> items Arrays.asList("apple", "apple", "banana","apple", "orange", "banana", "papaya");Map…

操作系統:分享10個經常用的cmd命令

電腦高手操作電腦時&#xff0c;通常都是在“運行”中直接輸入“命令”來直接調出相應的操作。如果大家也想要像電腦高手一樣&#xff0c;但是卻又不知道“運行”命令有哪些&#xff1f;在這里&#xff0c;小編就為大家分享10個“運行”命令&#xff0c;讓大家體驗到成為電腦高…

matlab交叉耦合,交叉耦合矩陣綜合問題

編程計算N階耦合矩陣&#xff0c;基本都能算對&#xff0c;但是對于某些特殊參數會出現R1!RN&#xff0c;大家又出現類似的情況么&#xff1f;希望高手幫忙計算以下參數&#xff0c;看看是否能算出來。參數為ftz[-1.2i -1.4i 1.4i 1.2i -1.05i 1.05i];傳輸零點RL20;%帶內回波N …

idea創建Package時出現包名累加,而不是樹形結構解決方法

idea打開工程的時候包名疊在一起了 點擊箭頭處按鈕,把第一第二行勾去掉 如下 最終效果

電腦鍵盤中英文按鍵有哪些?有什么作用?

對于電腦鍵盤&#xff0c;相信大家并不陌生&#xff0c;而在電腦鍵盤上面有著很多按鍵&#xff0c;除了數字按鍵和字母按鍵之外&#xff0c;還有很多看不懂的英文按鍵。那么這些英文按鍵是什么意思呢&#xff1f;如果并不了解&#xff0c;那么小編就為大家介紹所有英文按鍵的意…

在github中使用pages上傳自己的網頁

轉載自&#xff1a;http://www.cnblogs.com/lijiayi/p/githubpages.html 學了前端小半年&#xff0c;如今寫了個自己的網頁想要去應聘&#xff0c;卻發現部署很麻煩&#xff0c;部署到阿里云之類&#xff0c;買域名啊啥的還要收費&#xff0c;說貴也不貴&#xff0c;但我就是傲…

使用lamba中stream 進行分組統計

對一個list中的元素進行分組&#xff0c;并統計各個元素出現的次數。放入map<String,Long>。 代碼如下: Test public void test8() {List<String> items Arrays.asList("1", "2", "3","4", "1", "3"…

php 表單select,表單控件select標簽是如何使用的

表單控件select標簽是用來創建下拉列表的&#xff0c;通過標簽來定義可用選項以及其他屬性來設置表單控件的選擇個數等。今天將介紹的是HTML中的表單控件select的用法&#xff0c;具有一定的參考價值&#xff0c;希望對大家有所幫助。【推薦課程&#xff1a;HTML教程】select標…

電腦經常死機是什么原因?如何解決?

目錄 一、電腦經常死機是什么原因&#xff1f; 二、電腦經常死機如何解決&#xff1f; ??????? 一、電腦經常死機是什么原因&#xff1f; 1、電腦頻繁死機&#xff0c;在進行CMOS設置時也會出現死機現象&#xff0c;一般由硬件問題引起的&#xff0c;散熱不良…

重量級框架

1.概述 重量級框架則強調高可伸縮性&#xff0c;適合與開發大型企業應用。輕量級框架側重于減小開發的復雜度&#xff0c;相應的它的處理能力便有所減弱&#xff08;如事務功能弱、不具備分布式處理能力&#xff09;&#xff0c;比較適用于開發中小型企業應用。輕量級框架和重量…

Win10磁盤占用達到100%,優化一下就解決了

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…

2、IDEA以新窗口的形式打開多個項目

IDEA以新窗口的形式打開多個項目 修改1處如圖所示

160523、Oracle建立表空間和用戶

建立表空間和用戶的步驟&#xff1a; 用戶 建立&#xff1a;create user 用戶名 identified by "密碼"; 授權&#xff1a;grant create session to 用戶名; grant create table to 用戶名; grant create tablespace to 用戶名; …

Win10 該如何設置FTP呢,詳細設置步驟

復印&#xff0c;打印&#xff0c;掃描的日常操作是每個辦公人員的必備技能&#xff0c;我們來了解一下掃描至FTP的具體操作方法。 要使用FTP功能掃描文件到電腦&#xff0c;首先要需要一臺可以接收文件的FTP服務器&#xff0c;這個服務器我們可以借助第三方軟件搭建&#xff0…