點(diǎn)擊這里使用RSS訂閱本Blog:

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

純JAVA技術(shù)驗(yàn)證碼生成器(服務(wù)器端servlet實(shí)現(xiàn))

系統(tǒng) 1820 0
<!-- Feedsky FEED發(fā)布代碼開(kāi)始 --> <!-- FEED自動(dòng)發(fā)現(xiàn)標(biāo)記開(kāi)始 --> 點(diǎn)擊這里使用RSS訂閱本Blog: <link rel="alternate" type="application/rss+xml" title="RSS 2.0"> <!-- FEED自動(dòng)發(fā)現(xiàn)標(biāo)記結(jié)束 --><script language="javascript"><!-- main_sub="c1s67"; more_subs=""; --> </script><script language="javascript" src="http://www.feedsky.com/jsout/publishlist_v2.js?burl=softwave&amp;out_html=true"></script><!-- Feedsky FEED發(fā)布代碼結(jié)束 -->

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.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* @(#)VerifyCodeServlet.java Dec 9, 2007 8:14:14 PM
*
* @author Yuan
* 驗(yàn)證碼生成器,使用此類需要將表單里的驗(yàn)證碼輸入框的name屬性設(shè)為"verifycode"
*/
public class VerifyCodeGenerator {

private static final VerifyCodeGenerator generator = new VerifyCodeGenerator();

private final String ATTRIBUTE_NAME = "verifycode";
//圖片的寬度
private final int WIDTH = 15;
//圖片的高度
private final int HEIGHT = 22;
//字符串長(zhǎng)度
private final int CODE_LENGTH = 4;
//隨機(jī)字符串范圍
private final String RAND_RANGE = "abcdefghijklmnopqrstuvwxyz"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "1234567890"
+ "@#quot;;

private final char[] CHARS = RAND_RANGE.toCharArray();

private Random random = new Random();

private VerifyCodeGenerator(){
//
}

public static VerifyCodeGenerator getInstance(){
return generator;
}

/**
* 生成隨機(jī)字符串
* @return 隨機(jī)字符串
*/
private String getRandString(){
StringBuilder sb = new StringBuilder();
for (int i = 0; i < CODE_LENGTH; i++)
sb.append(CHARS[random.nextInt(CHARS.length)]);
return sb.toString();
}

/**
* 生成隨機(jī)顏色
* @param ll 產(chǎn)生顏色值下限(lower limit)
* @param ul 產(chǎn)生顏色值上限(upper limit)
* @return 生成的隨機(jī)顏色對(duì)象
*/
private Color getRandColor(int ll, int ul){
if (ll > 255) ll = 255;
if (ll < 1) ll = 1;
if (ul > 255) ul = 255;
if (ul < 1) ul = 1;
if (ul == ll) ul = ll + 1;
int r = random.nextInt(ul - ll) + ll;
int g = random.nextInt(ul - ll) + ll;
int b = random.nextInt(ul - ll) + ll;
Color color = new Color(r,g,b);
return color;
}

/**
* 生成指定字符串的圖像數(shù)據(jù)
* @param verifyCode 即將被打印的隨機(jī)字符串
* @return 生成的圖像數(shù)據(jù)
* */
private BufferedImage getImage(String verifyCode){

BufferedImage image = new BufferedImage(WIDTH * CODE_LENGTH, HEIGHT, BufferedImage.TYPE_INT_RGB);

//獲取圖形上下文
Graphics graphics = image.getGraphics();

//設(shè)置背景色
graphics.setColor(getRandColor(1,50));
//填充背景色
graphics.fillRect(0, 0, WIDTH * 4, HEIGHT);

//設(shè)置邊框顏色
graphics.setColor(new Color(0,255,0));
//畫(huà)邊框
for (int i=0; i<2; i++)
graphics.drawRect(i, i, WIDTH * CODE_LENGTH - i * 2 - 1, HEIGHT - i * 2 - 1);

//設(shè)置隨機(jī)干擾線條顏色
graphics.setColor(getRandColor(50,100));
//產(chǎn)生50條干擾線條
for (int i=0; i<50; i++){
int x1 = random.nextInt(WIDTH * CODE_LENGTH - 4) + 2;
int y1 = random.nextInt(HEIGHT - 4) + 2;
int x2 = random.nextInt(WIDTH * CODE_LENGTH - 2 - x1) + x1;
int y2 = y1;
graphics.drawLine(x1, y1, x2, y2);
}

//設(shè)置字體
graphics.setFont(new Font("Times New Roman", Font.PLAIN, 18));
//畫(huà)字符串
for (int i=0; i<this.CODE_LENGTH; i++){
String temp = verifyCode.substring(i, i+1);
graphics.setColor(getRandColor(100,255));
graphics.drawString(temp, 13 * i + 6, 16);
}

//圖像生效
graphics.dispose();

return image;
}

/**
* 將驗(yàn)證碼的圖像輸出
* @param request 用戶的請(qǐng)求對(duì)象
* @param response 用戶的響應(yīng)對(duì)象
* */
public void printImage(HttpServletRequest request,
HttpServletResponse response){
//將ContentType設(shè)為"image/jpeg",讓瀏覽器識(shí)別圖像格式。
response.setContentType("image/jpeg");
//設(shè)置頁(yè)面不緩存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 2000);

//獲得隨機(jī)驗(yàn)證碼
String verifyCode = this.getRandString();
String str = "ssss";
for(int i=0; i<10; i++)
str = str + str;
//獲得驗(yàn)證碼的圖像數(shù)據(jù)
BufferedImage bi = this.getImage(verifyCode);
//把驗(yàn)證碼存入session
request.getSession().setAttribute(ATTRIBUTE_NAME, verifyCode);
try{
//獲得Servlet輸出流
ServletOutputStream outStream = response.getOutputStream();
//創(chuàng)建可用來(lái)將圖像數(shù)據(jù)編碼為JPEG數(shù)據(jù)流的編碼器
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outStream);
//將圖像數(shù)據(jù)進(jìn)行編碼
encoder.encode(bi);
//強(qiáng)行將緩沖區(qū)的內(nèi)容輸入到頁(yè)面
outStream.flush();
//關(guān)閉輸出流
outStream.close();
}catch(IOException ex){
ex.printStackTrace();
}
}

/**
* 檢查輸入的驗(yàn)證碼是否正確,若用戶輸入的驗(yàn)證碼與生成的驗(yàn)證碼相符則返回true,否則返回false。
* @param request 用戶的請(qǐng)求對(duì)象
* @return 驗(yàn)證結(jié)果
* */
public boolean check(HttpServletRequest request){
if (((String)request.getParameter(ATTRIBUTE_NAME))
.equalsIgnoreCase((String)request.getSession().getAttribute(ATTRIBUTE_NAME))){
request.getSession().removeAttribute(ATTRIBUTE_NAME);
return true;
}
return false;
}
}<wbr></wbr> <wbr></wbr>
/**此代碼為深秋小雨所編寫(xiě),來(lái)自J道**/

==================================================================
摘自【http://www.blogjava.net/wuxingjia/archive/2008/04/05/190893.html】

<!-- Google Reader shared發(fā)布代碼開(kāi)始 --> <script type="text/javascript" src="http://www.google.com/reader/ui/publisher.js"></script><script type="text/javascript" src="http://www.google.com/reader/public/javascript/user/00697638153916680411/state/com.google/broadcast?n=5&amp;callback=GRC_p(%7Bc%3A%22green%22%2Ct%3A%22%5Cu8FD9%5Cu4E9B%5Cu6587%5Cu7AE0%5Cu4E5F%5Cu503C%5Cu5F97%5Cu4E00%5Cu770B%22%2Cs%3A%22false%22%7D)%3Bnew%20GRC"></script><!-- Google Reader shared發(fā)布代碼結(jié)束 -->

純JAVA技術(shù)驗(yàn)證碼生成器(服務(wù)器端servlet實(shí)現(xiàn))


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!??!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 自拍偷拍视频网站 | 精品在线播放 | 欧洲精品视频在线观看 | 91网站国产| 日日撸视频 | 6080伦理久久亚洲精品 | 亚洲福利| 国产毛片久久久久久国产毛片 | 九色网址| 91免费精品国偷自产在线在线 | 免费看a网站 | 精彩视频一区 | 无遮挡又黄又刺激的视频 | 久久日本精品国产精品白 | 国产精品久久久久久久久久免费 | 青娱乐九色 | 天天干天天色综合 | a4yy午夜 | 国产精品高清在线 | 天天狠狠 | jizz视频| 91视频这里只有精品 | 亚洲香蕉毛片久久网站老妇人 | 久久999视频 | 日本hdxxxxx护士免费的 | 五月天婷婷在线视频国产在线 | 美女国产精品 | 色倩网站 | 亚洲精品小视频 | 日本理论片好看理论片 | 大陆黄色a级片 | 黄a大片| 日本一区二区三区不卡在线看 | 欧美视频一区 | 国产二区三区 | 亚洲人成在线观看一区二区 | 国产精品久久久久久久久久久久 | 一级做性色a爰片久久毛片 亚洲午夜精品久久久久久app | 丝袜捆绑调教视频免费区 | 日本一区二区三区精品国产 | www日韩免费高清视频 |