日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java生成验证码工具类_Java生成图形验证码工具类

發(fā)布時間:2025/3/20 java 88 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java生成验证码工具类_Java生成图形验证码工具类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

生成驗證碼效果

validatecode.java 驗證碼生成類

package cn.dsna.util.images;

import java.awt.color;

import java.awt.font;

import java.awt.graphics2d;

import java.awt.image.bufferedimage;

import java.io.fileoutputstream;

import java.io.ioexception;

import java.io.outputstream;

import java.util.random;

import javax.imageio.imageio;

/**

* 驗證碼生成器

* @author dsna

*

*/

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;

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

// 生成隨機數

random random = new random();

// 將圖像填充為白色

g.setcolor(color.white);

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

// 創(chuàng)建字體

imgfontbyte imgfont=new imgfontbyte();

font font =imgfont.getfont(fontheight);

g.setfont(font);

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

int xs = random.nextint(width);

int ys = random.nextint(height);

int xe = xs+random.nextint(width/8);

int ye = ys+random.nextint(height/8);

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

}

}

imgfontbyte.java

package cn.dsna.util.images;

import java.io.bytearrayinputstream;

import java.awt.*;

/**

* ttf字體文件

* @author dsna

*

*/

public class imgfontbyte {

public font getfont(int fontheight){

try {

font basefont = font.createfont(font.truetype_font, new bytearrayinputstream(hex2byte(getfontbytestr())));

return basefont.derivefont(font.plain, fontheight);

} catch (exception e) {

return new font("arial",font.plain, fontheight);

}

}

private byte[] hex2byte(string str) {

if (str == null)

return null;

str = str.trim();

int len = str.length();

if (len == 0 || len % 2 == 1)

return null;

byte[] b = new byte[len / 2];

try {

for (int i = 0; i < str.length(); i += 2) {

b[i / 2] = (byte) integer

.decode("0x" + str.substring(i, i + 2)).intvalue();

}

return b;

} catch (exception e) {

return null;

}

} /**

* ttf字體文件的十六進制字符串

* @return

*/

private string getfontbytestr(){ return null;

return str;//字符串太長 在附件中找

}

}

validatecodeservlet.java servlet調用方法

package cn.dsna.util.images;

import java.io.ioexception;

import javax.servlet.servletexception;

import javax.servlet.http.httpservlet;

import javax.servlet.http.httpservletrequest;

import javax.servlet.http.httpservletresponse;

import javax.servlet.http.httpsession;

public class validatecodeservlet extends httpservlet {

private static final long serialversionuid = 1l;

@override

protected void doget(httpservletrequest reqeust,

httpservletresponse response) throws servletexception, ioexception {

// 設置響應的類型格式為圖片格式

response.setcontenttype("image/jpeg");

//禁止圖像緩存。

response.setheader("pragma", "no-cache");

response.setheader("cache-control", "no-cache");

response.setdateheader("expires", 0);

httpsession session = reqeust.getsession();

validatecode vcode = new validatecode(120,40,5,100);

session.setattribute("code", vcode.getcode());

vcode.write(response.getoutputstream());

}

/**

* web.xml 添加servlet

validatecodeservlet

cn.dsna.util.images.validatecodeservlet

validatecodeservlet

*.images

在地址欄輸入xxx/dsna.images 測試

*/

}

測試類

validatecodetest.java

package cn.dsna.util.images;

import java.io.ioexception;

import java.util.date;

public class validatecodetest {

/**

* @param args

*/

public static void main(string[] args) {

validatecode vcode = new validatecode(120,40,5,100);

try {

string path="d:/t/"+new date().gettime()+".png";

system.out.println(vcode.getcode()+" >"+path);

vcode.write(path);

} catch (ioexception e) {

e.printstacktrace();

}

}

}

web.xml 配置

validatecodeservlet

cn.dsna.util.images.validatecodeservlet

validatecodeservlet

*.images

以上所述是小編給大家介紹的java生成圖形驗證碼工具類,希望對大家有所幫助

如您對本文有疑問或者有任何想說的,請點擊進行留言回復,萬千網友為您解惑!

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的java生成验证码工具类_Java生成图形验证码工具类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本理论视频 | 欧美一区二区三区成人久久片 | www黄在线观看 | 成人午夜在线免费观看 | 亚洲在线视频观看 | 少妇免费看 | 成人免费毛片嘿嘿连载视频 | 99久久久国产 | 对白刺激国产子与伦 | 久久色中文字幕 | 男女搞网站 | 97精品人人a片免费看 | 欧美第一网站 | 亚洲第一免费视频 | 丰满岳妇乱一区二区三区 | 男人操女人免费视频 | 青青青在线观看视频 | 操夜夜| 国产尤物在线视频 | 国产视频精品视频 | 91免费小视频 | 免费在线观看黄视频 | 免费观看毛片视频 | 老司机午夜免费福利 | 精品在线观看视频 | 国产嫩bbwbbw高潮 | 亚洲精品一区二区三区精华液 | 亚洲啪啪| 91视频综合网 | 在线亚洲一区二区 | 亚洲av无码专区在线 | 国产乱淫av麻豆国产免费 | 嘿咻视频在线观看 | 欧洲精品在线观看 | 国产又粗又深又猛又爽又在线观看 | 国产日韩在线免费观看 | 欧美日韩高清一区二区 国产亚洲免费看 | 一区二区日韩精品 | 久久99精品久久久 | wwwxx欧美 | 日韩精品三级 | 欧美日韩成人 | 91免费黄视频 | 久久久久www| 91春色| 半推半就一ⅹ99av | 日日夜精品| 少妇av网 | 中文字幕人妻熟女人妻a片 麻豆91视频 | 免费一级特黄 | 国产极品视频在线观看 | a猛片| 粗大挺进潘金莲身体在线播放 | 99热青青草 | 日韩欧美精品在线视频 | 欧美91成人网 | 久久婷婷成人综合色 | 亚洲逼逼 | 九九热国产在线 | 国产农村妇女精品久久久 | 色噜噜在线播放 | 在线视频日韩欧美 | 三级视频在线播放 | 伊人青青草原 | 欧美成人高清在线 | 国产激情无码一区二区三区 | 日韩αv| 成人福利片 | 欧美日韩亚洲国产一区 | 久久涩 | 91成人精品视频 | hd丰满圆润的女人hd | 99热在线观看免费精品 | 中日毛片 | 日本a级免费 | 天天爽天天射 | 91成人在线观看国产 | 成人午夜在线免费观看 | av片手机在线观看 | 日本大胆人体视频 | www 在线观看视频 | 亚洲自拍偷拍精品 | 二区在线观看 | 亚洲拍拍视频 | 少妇一级淫片免费放中国 | 糖心视频在线 | 91精品久久久久久粉嫩 | 亚洲国产精品久久久久婷婷老年 | 天堂√| 中文精品无码中文字幕无码专区 | 欧美性猛交xxxx乱大交俱乐部 | 亚洲精品国产精品乱码不卡 | 国产精在线 | 国产精品久久久久久久久免费 | 久久久久久国产精品视频 | 91福利小视频 | 在线va| 又大又长粗又爽又黄少妇视频 | 天天艹天天爽 |