不知道你問的是不是生成這種圖片驗證碼?
如果只要一個隨機四位數 那這行代碼就夠了(new Random().nextInt(9000) + 1000;),
如果是生成頁面圖片驗證碼就是下面的了:
//設定 響應模式
resp.setContentType("image/jpeg");
// 生成令牌環數據;
Integer token = new Random().nextInt(9000) + 1000;
// 保存令牌環數據到session中
req.getSession().setAttribute(IMAGE_TOKEN_NAME, token);
// 生成令牌環圖片
ServletOutputStream out = resp.getOutputStream();
BufferedImage img = new BufferedImage(60, 20,
BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics();
g.setColor(Color.YELLOW);
g.fillRect(0, 0, img.getWidth(), img.getHeight());
g.setColor(Color.BLUE);
g.setFont(new Font("", Font.BOLD, 18));
g.drawString(String.valueOf(token), 10, 16);
ImageIO.write(img, "jpg", out);
out.close();
⑵ 急急怎樣獲得java隨即驗證碼
可以用servlet實現
public class AuthImage extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=gb2312"; // 設置字母的大小,大小
private Font mFont = new Font("Times New Roman", Font.PLAIN, 20);
public void init() throws ServletException { super.init();
}
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);
}
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 表明生成的響應是圖片
response.setContentType("image/jpeg");
int width = 80, height = 27;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics(); Random random = new Random();
g.setColor(getRandColor(200, 250));
g.fillRect(1, 1, width - 1, height - 1);
g.setColor(new Color(102, 102, 102));
g.drawRect(0, 0, width - 1, height - 1);
g.setFont(mFont);
g.setColor(getRandColor(160, 200));
// 畫隨機線 for (int i = 0; i < 155; i++) {
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(6) + 1;
int yl = random.nextInt(12) + 1;
g.drawLine(x, y, x + xl, y + yl);
}
// 從另一方向畫隨機線 for (int i = 0; i < 70; i++) {
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(12) + 1;
int yl = random.nextInt(6) + 1;
g.drawLine(x, y, x - xl, y - yl);
}
// 生成隨機數,並將隨機數字轉換為字母 String sRand = "";
for (int i = 0; i < 4; i++) {
int itmp = random.nextInt(26) + 65;
char ctmp = (char) itmp;
sRand += String.valueOf(ctmp);
g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
g.drawString(String.valueOf(ctmp), 15 * i + 10, 16);
}
HttpSession session = request.getSession(true); session.setAttribute("rand", sRand);
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
}
public void destroy() { }
}
⑶ java里怎麼發驗證碼到郵箱,然後登陸郵箱獲取驗證碼請高手指點,盡量具體些。。。
郵箱驗證分幾種,
最簡單的是直接發送驗證碼:驗證碼隨機產生,可以放到cookie里,限制有效時版間就是cookie的存活時權間。產生之後和發送郵件一樣直接發送到郵箱。當用戶驗證的時候直接從cookie里拿到驗證碼進行比較。
還有一種是驗證鏈接。在鏈接里要放一個驗證參數,這個參數包括用戶名或用戶id,創建時間,驗證碼。當然都要用某種方法去加密,當用戶點擊這個鏈接的時候,根據相應的方法解密獲得參數。這個可以放到一張動態表裡,表中有驗證碼和對應的用戶名或id。當用戶要求驗證的時候從資料庫中拿到驗證碼,根據鏈接中的時間判斷是否過期。驗證成功後刪除本條數據即可。如果鏈接只能使用一次,那麼在根據用戶名拿到數據之後不管驗證是否成功都要刪除數據
⑷ Java如何實現驗證碼驗證功能
Java如何實現驗證碼驗證功能呢?日常生活中,驗證碼隨處可見,他可以在一定程度上保護賬號安全,那麼他是怎麼實現的呢?
Java實現驗證碼驗證功能其實非常簡單:用到了一個Graphics類在畫板上繪制字母,隨機選取一定數量的字母隨機生成,然後在畫板上隨機生成幾條干擾線。
首先,寫一個驗證碼生成幫助類,用來繪制隨機字母:
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.image.BufferedImage;
importjava.io.IOException;
importjava.io.OutputStream;
importjava.util.Random;
importjavax.imageio.ImageIO;
publicfinalclassGraphicHelper{
/**
*以字元串形式返回生成的驗證碼,同時輸出一個圖片
*
*@paramwidth
*圖片的寬度
*@paramheight
*圖片的高度
*@paramimgType
*圖片的類型
*@paramoutput
*圖片的輸出流(圖片將輸出到這個流中)
*@return返回所生成的驗證碼(字元串)
*/
publicstaticStringcreate(finalintwidth,finalintheight,finalStringimgType,OutputStreamoutput){
StringBuffersb=newStringBuffer();
Randomrandom=newRandom();
BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphicsgraphic=image.getGraphics();
graphic.setColor(Color.getColor("F8F8F8"));
graphic.fillRect(0,0,width,height);
Color[]colors=newColor[]{Color.BLUE,Color.GRAY,Color.GREEN,Color.RED,Color.BLACK,Color.ORANGE,
Color.CYAN};
//在"畫板"上生成干擾線條(50是線條個數)
for(inti=0;i<50;i++){
graphic.setColor(colors[random.nextInt(colors.length)]);
finalintx=random.nextInt(width);
finalinty=random.nextInt(height);
finalintw=random.nextInt(20);
finalinth=random.nextInt(20);
finalintsignA=random.nextBoolean()?1:-1;
finalintsignB=random.nextBoolean()?1:-1;
graphic.drawLine(x,y,x+w*signA,y+h*signB);
}
//在"畫板"上繪制字母
graphic.setFont(newFont("ComicSansMS",Font.BOLD,30));
for(inti=0;i<6;i++){
finalinttemp=random.nextInt(26)+97;
Strings=String.valueOf((char)temp);
sb.append(s);
graphic.setColor(colors[random.nextInt(colors.length)]);
graphic.drawString(s,i*(width/6),height-(height/3));
}
graphic.dispose();
try{
ImageIO.write(image,imgType,output);
}catch(IOExceptione){
e.printStackTrace();
}
returnsb.toString();
}
}
接著,創建一個servlet,用來固定圖片大小,以及處理驗證碼的使用場景,以及捕獲頁面生成的驗證碼(捕獲到的二維碼與用戶輸入的驗證碼一致才能通過)。
importjava.io.OutputStream;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
@WebServlet(urlPatterns="/verify/regist.do")
{
=3398560501558431737L;
@Override
protectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//獲得當前請求對應的會話對象
HttpSessionsession=request.getSession();
//從請求中獲得URI(統一資源標識符)
Stringuri=request.getRequestURI();
System.out.println("hello:"+uri);
finalintwidth=180;//圖片寬度
finalintheight=40;//圖片高度
finalStringimgType="jpeg";//指定圖片格式(不是指MIME類型)
finalOutputStreamoutput=response.getOutputStream();//獲得可以向客戶端返回圖片的輸出流
//(位元組流)
//創建驗證碼圖片並返回圖片上的字元串
Stringcode=GraphicHelper.create(width,height,imgType,output);
System.out.println("驗證碼內容:"+code);
//建立uri和相應的驗證碼的關聯(存儲到當前會話對象的屬性中)
session.setAttribute(uri,code);
System.out.println(session.getAttribute(uri));
}
}
接著寫一個HTML注冊頁面用來檢驗一下:
<html>
<head>
<metacharset="UTF-8">
<title>注冊</title>
<linkrel="stylesheet"href="styles/general.css">
<linkrel="stylesheet"href="styles/cell.css">
<linkrel="stylesheet"href="styles/form.css">
<scripttype="text/javascript"src="js/ref.js"></script>
<styletype="text/css">
.logo-container{
margin-top:50px;
}
.logo-containerimg{
width:100px;
}
.message-container{
height:80px;
}
.link-container{
height:40px;
line-height:40px;
}
.link-containera{
text-decoration:none;
}
</style>
</head>
<body>
<divclass="containerform-container">
<formaction="/wen/regist.do"method="post">
<divclass="form"><!--注冊表單開始-->
<divclass="form-row">
<spanclass="cell-1">
<iclass="fafa-user"></i>
</span>
<spanclass="cell-11"style="text-align:left;">
<inputtype="text"name="username"placeholder="請輸入用戶名">
</span>
</div>
<divclass="form-row">
<spanclass="cell-1">
<iclass="fafa-key"></i>
</span>
<spanclass="cell-11"style="text-align:left;">
</span>
</div>
<divclass="form-row">
<spanclass="cell-1">
<iclass="fafa-keyboard-o"></i>
</span>
<spanclass="cell-11"style="text-align:left;">
<inputtype="password"name="confirm"placeholder="請確認密碼">
</span>
</div>
<divclass="form-row">
<spanclass="cell-7">
<inputtype="text"name="verifyCode"placeholder="請輸入驗證碼">
</span>
<spanclass="cell-5"style="text-align:center;">
<imgsrc="/demo/verify/regist.do"onclick="myRefersh(this)">
</span>
</div>
<divclass="form-row"style="border:none;">
<spanclass="cell-6"style="text-align:left">
<inputtype="reset"value="重置">
</span>
<spanclass="cell-6"style="text-align:right;">
<inputtype="submit"value="注冊">
</span>
</div>
</div><!--注冊表單結束-->
</form>
</div>
</body>
</html>
效果如下圖:
當點擊刷新頁面的時候,驗證碼也會隨著變化,但我們看不清驗證碼時,只要點擊驗證碼就會刷新,這樣局部的刷新可以用JavaScript來實現。
在<img
src="/demo/verify/regist.do">中,添加一個問號和一串後綴數字,當刷新時讓後綴數字不斷改變,那麼形成的驗證碼也會不斷變化,我們可以採用的一種辦法是後綴數字用date代替,date獲取本機時間,時間是隨時變的,這樣就保證了刷新驗證碼可以隨時變化。
代碼如下:
functionmyRefersh(e){
constsource=e.src;//獲得原來的src中的內容
//console.log("source:"+source);
varindex=source.indexOf("?");//從source中尋找?第一次出現的位置(如果不存在則返回-1)
//console.log("index:"+index);
if(index>-1){//如果找到了?就進入內部
vars=source.substring(0,index);//從source中截取index之前的內容(index以及index之後的內容都被舍棄)
//console.log("s:"+s);
vardate=newDate();//創建一個Date對象的一個實例
vartime=date.getTime();//從新創建的Date對象的實例中獲得該時間對應毫秒值
e.src=s+"?time="+time;//將加了尾巴的地址重新放入到src上
//console.log(e.src);
}else{
vardate=newDate();
e.src=source+"?time="+date.getTime();
}
}
如回答不詳細可追問
⑸ java怎麼實現隨機4個帶有數字和字母的驗證碼
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.image.BufferedImage;
importjava.util.Random;
importjavax.imageio.ImageIO;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
publicclassRandomValidateCode{
="RANDOMVALIDATECODEKEY";//放到session中的key
privateRandomrandom=newRandom();
privateStringrandString="";//隨機產生的字元串
privateintwidth=80;//圖片寬
privateintheight=26;//圖片高
privateintlineSize=40;//干擾線數量
privateintstringNum=4;//隨機產生字元數量
/*
*獲得字體
*/
privateFontgetFont(){
returnnewFont("Fixedsys",Font.CENTER_BASELINE,18);
}
/*
*獲得顏色
*/
privateColorgetRandColor(intfc,intbc){
if(fc>255)
fc=255;
if(bc>255)
bc=255;
intr=fc+random.nextInt(bc-fc-16);
intg=fc+random.nextInt(bc-fc-14);
intb=fc+random.nextInt(bc-fc-18);
returnnewColor(r,g,b);
}
/**
*生成隨機圖片
*/
publicvoidgetRandcode(HttpServletRequestrequest,
HttpServletResponseresponse){
HttpSessionsession=request.getSession();
//BufferedImage類是具有緩沖區的Image類,Image類是用於描述圖像信息的類
BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
Graphicsg=image.getGraphics();//產生Image對象的Graphics對象,改對象可以在圖像上進行各種繪制操作
g.fillRect(0,0,width,height);
g.setFont(newFont("TimesNewRoman",Font.ROMAN_BASELINE,18));
g.setColor(getRandColor(110,133));
//繪制干擾線
for(inti=0;i<=lineSize;i++){
drowLine(g);
}
//繪制隨機字元
StringrandomString="";
for(inti=1;i<=stringNum;i++){
randomString=drowString(g,randomString,i);
}
session.removeAttribute(RANDOMCODEKEY);
session.setAttribute(RANDOMCODEKEY,randomString);
System.out.println(randomString);
g.dispose();
try{
ImageIO.write(image,"JPEG",response.getOutputStream());//將內存中的圖片通過流動形式輸出到客戶端
}catch(Exceptione){
e.printStackTrace();
}
}
/*
*繪制字元串
*/
privateStringdrowString(Graphicsg,StringrandomString,inti){
g.setFont(getFont());
g.setColor(newColor(random.nextInt(101),random.nextInt(111),random.nextInt(121)));
Stringrand=String.valueOf(getRandomString(random.nextInt(randString.length())));
randomString+=rand;
g.translate(random.nextInt(3),random.nextInt(3));
g.drawString(rand,13*i,16);
returnrandomString;
}
/*
*繪制干擾線
*/
privatevoiddrowLine(Graphicsg){
intx=random.nextInt(width);
inty=random.nextInt(height);
intxl=random.nextInt(13);
intyl=random.nextInt(15);
g.drawLine(x,y,x+xl,y+yl);
}
/*
*獲取隨機的字元
*/
publicStringgetRandomString(intnum){
returnString.valueOf(randString.charAt(num));
}
}
⑹ java注冊 發過來的手機驗證碼怎麼獲得
假如注冊的電話是 13000000000
用戶點擊注冊後,後台生成一個6位的隨機數,保存到資料庫,並且將該驗證碼,調用簡訊介面,發送給該手機號!接下來用戶填寫收到的驗證碼,並且進行驗證(匹配資料庫存的驗證碼,以及該驗證碼是否失效)!
⑺ java中如何編寫輸出一組由大寫和數字組成的6個隨機驗證碼,字母O和I不能輸出
importjava.util.Random;
publicclassTest{
publicstaticvoidmain(String[]args){
='i';
StringBuffersb=newStringBuffer();
for(inti=0;i<6;i++){
inta=Math.abs((newRandom()).nextInt(57));//產生0~57的隨機數
if(a<=9){//將0~9轉為char的0~9
sb.append((char)(a+48));
}elseif(a<33){//將10~33轉為char的A~Z
if((a+55)==79||(a+55)==73){
sb.append((char)(a+63));
}else{
sb.append((char)(a+55));
}
}else{//將33~57轉為char的a~z
sb.append((char)(a+63));
}
}
System.out.println("隨機生成的6位密碼為:"+sb.toString());
}
}
⑻ java 登陸時的驗證碼怎麼做
後台寫一個生成圖片隨機的代碼,生成圖片給前台。切換圖片的時候,使用ajax獲取圖片數據就行。
附上生成圖片的代碼
public class ValidateCode {
private int width=180;
private int height=60;
private int codeCount = 4;
private int x = 0;
private int codeY;
private String Code;
private BufferedImage buffImg;
static char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', 'o', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
private int fontHeight;
public ValidateCode() {
x = width / (codeCount + 2);
fontHeight = height - 2;
codeY = height - 4;
CreateCode();
}
public void CreateCode(){
// 定義圖像buffer
BufferedImage 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);
// 創建字體,字體的大小應該根據圖片的高度來定。
Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);
// 設置字體。
g.setFont(font);
// 畫邊框。
g.setColor(Color.BLACK);
g.drawRect(0, 0, width - 1, height - 1);
// randomCode用於保存隨機產生的驗證碼,以便用戶登錄後進行驗證。
StringBuffer randomCode = new StringBuffer();
int red = 0, green = 0, blue = 0;
// 隨機產生codeCount數字的驗證碼。
for (int i = 0; i < codeCount; i++) {
// 得到隨機產生的驗證碼數字。
String strRand = String.valueOf(codeSequence[random.nextInt(62)]);
// 產生隨機的顏色分量來構造顏色值,這樣輸出的每位數字的顏色值都將不同。
red = random.nextInt(255);
green = random.nextInt(255);
blue = random.nextInt(255);
// 用隨機產生的顏色將驗證碼繪制到圖像中。
g.setColor(new Color(red, green, blue));
g.drawString(strRand, (i ) * x+20, codeY);
// 將產生的四個隨機數組合在一起。
randomCode.append(strRand);
}
this.Code=randomCode.toString().toUpperCase();
this.buffImg=buffImg;
}
public String getCode() {
return Code;
}
public void setCode(String code) {
Code = code;
}
public BufferedImage getBuffImg() {
return buffImg;
}
public void setBuffImg(BufferedImage buffImg) {
this.buffImg = buffImg;
}
}