真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java滑動驗(yàn)證碼代碼 java破解滑動驗(yàn)證碼

驗(yàn)證碼 代碼

你在java發(fā)這個問題!我就把java 的驗(yàn)證碼源碼給你。

創(chuàng)新互聯(lián)公司公司2013年成立,先為陸川等服務(wù)建站,陸川等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為陸川企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

tr

tdfont color="#FFFFFF"驗(yàn)證碼:/font/td

td width="22%"input type="text" name="randomcode" class='input' size='4' maxlength="8" style="width:50px;height:18px" onKeyDown="if (event.keyCode==13)submitLogin();"

/td

td width="48%"img src="./showradomcode.jsp"/td

/tr

文件二:showradomcode.jsp

%@ page contentType="image/jpeg" import="java.awt.image.*,javax.imageio.*" %jsp:useBean id="rc" class="com.hanweb.sso.ldap.util.RandomChar" scope="page"/%

//設(shè)置頁面不緩存

//response.reset();

response.setContentType("image/jpeg");

response.setHeader("Pragma","No-cache");

response.setHeader("Cache-Control","no-cache");

response.setDateHeader("Expires", 0);

//在內(nèi)存中創(chuàng)建圖象寬60 高18 4個字符 0條干擾線

BufferedImage image = rc.getRandomImage(58, 18, 4, 1);

//設(shè)置其session值

session.setAttribute("jcmsrandomchar", rc.getRandomString());

session.setMaxInactiveInterval(100000000);

ImageIO.write(image, "JPEG", response.getOutputStream());

%

文件三:RandomChar.java

package com.hanweb.sso.ldap.util;

/**

* Title: 隨機(jī)碼圖形生成程序的處理 Description:

* 為了加強(qiáng)網(wǎng)絡(luò)安全,防止黑課工具對系統(tǒng)的攻擊,現(xiàn)在通用隨機(jī)碼來解決這個問題,因?yàn)槊恳淮萎a(chǎn)生的隨機(jī)碼是隨機(jī)的,所以使用窮舉法破解密碼的工具就無能為力了

* Copyright: Copyright (c) 2004-2010 Company: SDLDAP

*

* @author LiChanglai

* @version 1.0

*/

import java.util.*;

import java.awt.*;

import java.awt.image.*;

public class RandomChar {

/**

* 給定范圍獲得隨機(jī)顏色

*

* @param fc

* int 參數(shù)1

* @param bc

* int 參數(shù)2

* @return Color 返回的color對象

*/

private String strRandomString; // 生成的隨機(jī)數(shù)

/**

* 取其生成的隨機(jī)數(shù)

*

* @return String

*/

public String getRandomString() {

return strRandomString;

}

/**

* 設(shè)置其生成的隨數(shù)

*

* @param randomString

* String

*/

public void setRandomString(String randomString) {

this.strRandomString = randomString;

}

/**

* 取其某一范圍的color

*

* @param fc

* int 范圍參數(shù)1

* @param bc

* int 范圍參數(shù)2

* @return Color

*/

private Color getRandColor(int fc, int bc) {

// 取其隨機(jī)顏色

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

}

/**

* 用于生成其隨機(jī)數(shù)

*

* @param randomCount

* int 隨機(jī)數(shù)總長度

* @return String 返回的隨機(jī)數(shù)

*/

private String getRandomString(int nRandomCount) {

/*

* String[] a = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",

* "B", "C", "D", "E", "F", "G", "H", "I", "G", "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" };

*/

String[] a = { "a", "b", "c", "d", "e", "f", "g", "h", "g", "k", "m",

"n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };

String strRand = "";

int nRand;

// 取其隨機(jī)數(shù)的總數(shù)

int LengthOfRandom = a.length;

// 生成隨機(jī)類

Random random = new Random();

// 循環(huán)取隨機(jī)取其整數(shù),并將其整數(shù)所對應(yīng)的結(jié)果進(jìn)行累加

for (int i = 0; i nRandomCount; i++) {

nRand = random.nextInt(LengthOfRandom);

strRand += a[nRand];

}

// 返回累加后的結(jié)果

return strRand;

}

/**

* 生成其隨機(jī)的圖形

*

* @param width

* int 生成圖形的寬度

* @param height

* int 生成圖形的高度

* @param nLengthOfRandom

* int 隨機(jī)碼的個數(shù)

* @param nDisturbLineCount

* int 干擾線的條數(shù)

* @return BufferedImage

*/

public BufferedImage getRandomImage(int nWidth, int nHeight,

int nLengthOfRandom, int nDisturbLineCount)

{

// 在內(nèi)存中創(chuàng)建圖象

BufferedImage image = new BufferedImage(nWidth, nHeight,

BufferedImage.TYPE_INT_RGB);

// 獲取圖形上下文

Graphics g = image.getGraphics();

String strRand = "";

nLengthOfRandom = (nLengthOfRandom = 0) ? 6 : nLengthOfRandom;

nDisturbLineCount = (nDisturbLineCount = 0) ? 0 : nDisturbLineCount;

// 生成隨機(jī)類

Random random = new Random();

// 設(shè)定背景色

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

g.fillRect(0, 0, nWidth, nHeight);

// 設(shè)定字體

g.setFont(new Font("Times New Roman", Font.PLAIN, 16));

// 畫邊框

g.setColor(new Color(255, 255, 255));

g.drawRect(0, 0, nWidth - 1, nHeight - 1);

// 隨機(jī)產(chǎn)生nDisturbLineCount條干擾線,使圖象中的認(rèn)證碼不易被其它程序探測到

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

for (int i = 0; i nDisturbLineCount; i++) {

int x = random.nextInt(nWidth);

int y = random.nextInt(nHeight);

int xl = random.nextInt(12);

int yl = random.nextInt(12);

g.drawLine(x, y, x + xl, y + yl);

}

// 取隨機(jī)產(chǎn)生的認(rèn)證碼(6位)

strRand = this.getRandomString(nLengthOfRandom);

// 設(shè)置其屬性randomString的值

this.strRandomString = strRand;

for (int i = 0; i nLengthOfRandom; i++) {

// 將認(rèn)證碼顯示到圖象中

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

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

// 調(diào)用函數(shù)出來的顏色相同,可能是因?yàn)榉N子太接近,所以只能直接生成

g.drawString(strRand.substring(i, i + 1), 13 * i + 5, 14);

}

// 圖象生效

g.dispose();

return image;

}

}

Java如何實(shí)現(xiàn)驗(yàn)證碼驗(yàn)證功能

Java如何實(shí)現(xiàn)驗(yàn)證碼驗(yàn)證功能呢?日常生活中,驗(yàn)證碼隨處可見,他可以在一定程度上保護(hù)賬號安全,那么他是怎么實(shí)現(xiàn)的呢?

Java實(shí)現(xiàn)驗(yàn)證碼驗(yàn)證功能其實(shí)非常簡單:用到了一個Graphics類在畫板上繪制字母,隨機(jī)選取一定數(shù)量的字母隨機(jī)生成,然后在畫板上隨機(jī)生成幾條干擾線。

首先,寫一個驗(yàn)證碼生成幫助類,用來繪制隨機(jī)字母:

import?java.awt.Color;

import?java.awt.Font;

import?java.awt.Graphics;

import?java.awt.image.BufferedImage;

import?java.io.IOException;

import?java.io.OutputStream;

import?java.util.Random;

import?javax.imageio.ImageIO;

public?final?class?GraphicHelper?{

/**

*?以字符串形式返回生成的驗(yàn)證碼,同時(shí)輸出一個圖片

*

*?@param?width

*????????????圖片的寬度

*?@param?height

*????????????圖片的高度

*?@param?imgType

*????????????圖片的類型

*?@param?output

*????????????圖片的輸出流(圖片將輸出到這個流中)

*?@return?返回所生成的驗(yàn)證碼(字符串)

*/

public?static?String?create(final?int?width,?final?int?height,?final?String?imgType,?OutputStream?output)?{

StringBuffer?sb?=?new?StringBuffer();

Random?random?=?new?Random();

BufferedImage?image?=?new?BufferedImage(width,?height,?BufferedImage.TYPE_INT_RGB);

Graphics?graphic?=?image.getGraphics();

graphic.setColor(Color.getColor("F8F8F8"));

graphic.fillRect(0,?0,?width,?height);

Color[]?colors?=?new?Color[]?{?Color.BLUE,?Color.GRAY,?Color.GREEN,?Color.RED,?Color.BLACK,?Color.ORANGE,

Color.CYAN?};

//?在?"畫板"上生成干擾線條?(?50?是線條個數(shù))

for?(int?i?=?0;?i??50;?i++)?{

graphic.setColor(colors[random.nextInt(colors.length)]);

final?int?x?=?random.nextInt(width);

final?int?y?=?random.nextInt(height);

final?int?w?=?random.nextInt(20);

final?int?h?=?random.nextInt(20);

final?int?signA?=?random.nextBoolean()???1?:?-1;

final?int?signB?=?random.nextBoolean()???1?:?-1;

graphic.drawLine(x,?y,?x?+?w?*?signA,?y?+?h?*?signB);

}

//?在?"畫板"上繪制字母

graphic.setFont(new?Font("Comic?Sans?MS",?Font.BOLD,?30));

for?(int?i?=?0;?i??6;?i++)?{

final?int?temp?=?random.nextInt(26)?+?97;

String?s?=?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?(IOException?e)?{

e.printStackTrace();

}

return?sb.toString();

}

}?

接著,創(chuàng)建一個servlet,用來固定圖片大小,以及處理驗(yàn)證碼的使用場景,以及捕獲頁面生成的驗(yàn)證碼(捕獲到的二維碼與用戶輸入的驗(yàn)證碼一致才能通過)。

import?java.io.OutputStream;

import?javax.servlet.ServletException;

import?javax.servlet.annotation.WebServlet;

import?javax.servlet.http.HttpServlet;

import?javax.servlet.http.HttpServletRequest;

import?javax.servlet.http.HttpServletResponse;

import?javax.servlet.http.HttpSession;

@WebServlet(urlPatterns?=?"/verify/regist.do"?)

public?class?VerifyCodeServlet?extends?HttpServlet?{

private?static?final?long?serialVersionUID?=?3398560501558431737L;

@Override

protected?void?service(HttpServletRequest?request,?HttpServletResponse?response)

throws?ServletException,?IOException?{

//?獲得?當(dāng)前請求?對應(yīng)的?會話對象

HttpSession?session?=?request.getSession();

//?從請求中獲得?URI?(?統(tǒng)一資源標(biāo)識符?)

String?uri?=?request.getRequestURI();

System.out.println("hello?:?"?+?uri);

final?int?width?=?180;?//?圖片寬度

final?int?height?=?40;?//?圖片高度

final?String?imgType?=?"jpeg";?//?指定圖片格式?(不是指MIME類型)

final?OutputStream?output?=?response.getOutputStream();?//?獲得可以向客戶端返回圖片的輸出流

//?(字節(jié)流)

//?創(chuàng)建驗(yàn)證碼圖片并返回圖片上的字符串

String?code?=?GraphicHelper.create(width,?height,?imgType,?output);

System.out.println("驗(yàn)證碼內(nèi)容:?"?+?code);

//?建立?uri?和?相應(yīng)的?驗(yàn)證碼?的關(guān)聯(lián)?(?存儲到當(dāng)前會話對象的屬性中?)

session.setAttribute(uri,?code);

System.out.println(session.getAttribute(uri));

}

}?

接著寫一個HTML注冊頁面用來檢驗(yàn)一下:

html

head

meta?charset="UTF-8"

title注冊/title

link?rel="stylesheet"?href="styles/general.css"

link?rel="stylesheet"?href="styles/cell.css"

link?rel="stylesheet"?href="styles/form.css"

script?type="text/javascript"?src="js/ref.js"/script

style?type="text/css"?

.logo-container?{

margin-top:?50px?;

}

.logo-container?img?{

width:?100px?;

}

.message-container?{

height:?80px?;

}

.link-container?{

height:?40px?;

line-height:?40px?;

}

.link-container?a?{

text-decoration:?none?;

}

/style

/head

body

div?class="container?form-container"

form?action="/wendao/regist.do"?method="post"

div?class="form"?!--?注冊表單開始?--

div?class="form-row"

span?class="cell-1"

i?class="fa?fa-user"/i

/span

span?class="cell-11"?style="text-align:?left;"

input?type="text"?name="username"?placeholder="請輸入用戶名"

/span

/div

div?class="form-row"

span?class="cell-1"

i?class="fa?fa-key"/i

/span

span?class="cell-11"?style="text-align:?left;"

input?type="password"?name="password"?placeholder="請輸入密碼"

/span

/div

div?class="form-row"

span?class="cell-1"

i?class="fa?fa-keyboard-o"/i

/span

span?class="cell-11"?style="text-align:?left;"

input?type="password"?name="confirm"?placeholder="請確認(rèn)密碼"

/span

/div

div?class="form-row"

span?class="cell-7"

input?type="text"?name="verifyCode"?placeholder="請輸入驗(yàn)證碼"

/span

span?class="cell-5"?style="text-align:?center;"

img?src="/demo/verify/regist.do"?onclick="myRefersh(this)"

/span

/div

div?class="form-row"?style="border:?none;"

span?class="cell-6"?style="text-align:?left"

input?type="reset"?value="重置"

/span

span?class="cell-6"??style="text-align:right;"

input?type="submit"?value="注冊"

/span

/div

/div?!--?注冊表單結(jié)束?--

/form

/div

/body

/html

效果如下圖:

在控制臺接收到的圖片中驗(yàn)證碼的變化如下:

當(dāng)點(diǎn)擊刷新頁面的時(shí)候,驗(yàn)證碼也會隨著變化,但我們看不清驗(yàn)證碼時(shí),只要點(diǎn)擊驗(yàn)證碼就會刷新,這樣局部的刷新可以用JavaScript來實(shí)現(xiàn)。

在img

src="/demo/verify/regist.do"中,添加一個問號和一串后綴數(shù)字,當(dāng)刷新時(shí)讓后綴數(shù)字不斷改變,那么形成的驗(yàn)證碼也會不斷變化,我們可以采用的一種辦法是后綴數(shù)字用date代替,date獲取本機(jī)時(shí)間,時(shí)間是隨時(shí)變的,這樣就保證了刷新驗(yàn)證碼可以隨時(shí)變化。

代碼如下:

function?myRefersh(?e?)?{

const?source?=?e.src?;?//?獲得原來的?src?中的內(nèi)容

//console.log(?"source?:?"?+?source??)?;

var?index?=?source.indexOf(?"?"?)?;??//?從?source?中尋找???第一次出現(xiàn)的位置?(如果不存在則返回?-1?)

//console.log(?"index?:?"?+?index??)?;

if(?index??-1?)?{?//?如果找到了????就進(jìn)入內(nèi)部

var?s?=?source.substring(?0?,?index?)?;?//?從?source?中截取?index?之前的內(nèi)容?(?index?以及?index?之后的內(nèi)容都被舍棄?)

//console.log(?"s?:?"?+?s??)?;

var?date?=?new?Date();?//?創(chuàng)建一個?Date?對象的?一個?實(shí)例

var?time?=?date.getTime()?;?//?從?新創(chuàng)建的?Date?對象的實(shí)例中獲得該時(shí)間對應(yīng)毫秒值

e.src?=?s?+?"?time="?+?time?;?//?將?加了?尾巴?的?地址?重新放入到?src?上

//console.log(?e.src?)?;

}?else?{

var?date?=?new?Date();

e.src?=?source?+?"?time="?+?date.getTime();

}

}

如回答不詳細(xì)可追問

拖動滑塊完成驗(yàn)證 java代碼怎么實(shí)現(xiàn)

slider=new JSlider(JSlider.VERTICAL,FPS_MIN,FPS_MAX,FPS_INIT);

slider.setMajorTickSpacing(10);//主刻度間隔

slider.setMinorTickSpacing(1);//次刻度間隔

slider.setPaintTicks(true);//是否顯示刻度標(biāo)記

HashtableInteger,JLabel labeltable=new HashtableInteger,JLabel();

labeltable.put(new Integer(0),new JLabel("慢速"));

labeltable.put(new Integer(FPS_MAX/2),new JLabel("中速"));

labeltable.put(new Integer(FPS_MAX),new JLabel("快速"));

slider.setLabelTable(labeltable);

slider.setPaintLabels(true);//是否顯示label


本文標(biāo)題:java滑動驗(yàn)證碼代碼 java破解滑動驗(yàn)證碼
網(wǎng)頁網(wǎng)址:http://weahome.cn/article/ddchjsg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部