java後臺產生驗證碼後臺驗證
直接跳severlet在java後臺生成驗證碼:
@RequestMapping(value="yzm.action") public void Yzm(HttpSession session,HttpServletResponse resp){ // 驗證碼圖片的寬度。 int width = 60; // 驗證碼圖片的高度。 int height = 20; // 驗證碼字元個數 int codeCount = 4; int x = 0; // 字型高度 int fontHeight; int codeY; 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', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; x = width / (codeCount + 1); fontHeight = height - 2; codeY = height - 4; 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); // 隨機產生160條幹擾線,使圖象中的認證碼不易被其它程式探測到。 g.setColor(Color.BLACK); for (int i = 0; i < 1; i++) { int x2 = random.nextInt(width); int y2 = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x2, y2, x + xl, y2 + yl); } // 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(36)]); // 產生隨機的顏色分量來構造顏色值,這樣輸出的每位數字的顏色值都將不同。 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中。 session.setAttribute("validateCode", randomCode.toString()); ServletOutputStream sos; try { sos = resp.getOutputStream(); ImageIO.write(buffImg, "jpeg", sos); sos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
jsp顯示頁面的程式碼,點選圖片重新整理
<td><img id="img" src="yzm.action"/>${validateCode}</td>
<td><input type="text" name="yzma"/><br/></td>
$("#img").click(function(){
$(this).attr("src","yzm.action?"+new Date().getTime());
});
將文字框中的值傳入後臺,與最開始生成驗證碼的隨機數進行比較即可完成驗證。頁面上拿到的session的值老是比驗證碼晚一步,所以採取後臺進行驗證。這裡我也不知道什麼原因,望小夥伴們告知。。。
另一種思路,後臺生成隨機數,前端生成畫布,用ajax拿隨機數
//後臺只生成隨機數 @RequestMapping(value="random.action") public void findRandom (HttpServletResponse response) throws IOException{ // 驗證碼字元個數 int codeCount = 4; 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', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; // 建立一個隨機數生成器類 Random random = new Random(); // randomCode用於儲存隨機產生的驗證碼,以便使用者登入後進行驗證。 StringBuffer randomCode = new StringBuffer(); for (int i = 0; i < codeCount; i++) { // 得到隨機產生的驗證碼數字。 String strRand = String.valueOf(codeSequence[random.nextInt(36)]); // 將產生的四個隨機數組合在一起。 randomCode.append(strRand); } PrintWriter out = response.getWriter(); out.print(randomCode); }
jsp,jq,js程式碼
<body>
<canvas id="canvas" width="70" height="34"></canvas>
<a href="javascript:;" id="img" class="pull-right" style="line-height: 34px;text-indent: 10px;">換一張</a>
<input type="text" class="form-control" id="yzms" name="yzms" readonly = "readonly" style="display:none" >
</body>
<script type="text/javascript">
$.ajax({
url:"random.action",
success:function(k){
console.log(k)
$("#yzms").attr("value",k);
drawPic();
}
})
$("#img").on("click",function(){
var _this=$(this)
$.ajax({
url:"random.action",
success:function(k){
console.log(k)
$("#yzms").attr("value",k);
drawPic();
}
})
})
/**生成一個隨機數**/
function randomNum(min,max){
return Math.floor( Math.random()*(max-min)+min);
}
/**生成一個隨機色**/
function randomColor(min,max){
var r = randomNum(min,max);
var g = randomNum(min,max);
var b = randomNum(min,max);
return "rgb("+r+","+g+","+b+")";
}
/**繪製驗證碼圖片**/
function drawPic(){
var canvas=document.getElementById("canvas");
var width=canvas.width;
var height=canvas.height;
var ctx = canvas.getContext('2d');
ctx.textBaseline = 'bottom';
/**繪製背景色**/
ctx.fillStyle = randomColor(180,240); //顏色若太深可能導致看不清
ctx.fillRect(0,0,width,height);
/**繪製文字**/
/* for(var i=0; i<4; i++){ */
var txt = $("#yzms").attr("value");
ctx.fillStyle = randomColor(50,160); //隨機生成字型顏色
ctx.font = randomNum(15,20)+'px SimHei'; //隨機生成字型大小
var x = 20;
var y = randomNum(20,30);
var deg = randomNum(-45, 45);
//修改座標原點和旋轉角度
ctx.translate(x,y);
ctx.rotate(deg*Math.PI/180);
ctx.fillText(txt, 0,0);
//恢復座標原點和旋轉角度
ctx.rotate(-deg*Math.PI/180);
ctx.translate(-x,-y);
/* } */
/* /**繪製干擾線**/
for(var i=0; i<8; i++){
ctx.strokeStyle = randomColor(40,180);
ctx.beginPath();
ctx.moveTo( randomNum(0,width), randomNum(0,height) );
ctx.lineTo( randomNum(0,width), randomNum(0,height) );
ctx.stroke();
}
/**繪製干擾點**/
/* for(var i=0; i<100; i++){
ctx.fillStyle = randomColor(0,255);
ctx.beginPath();
ctx.arc(randomNum(0,width),randomNum(0,height), 1, 0, 2*Math.PI);
ctx.fill();
} */
}
效果展示:
相關推薦
java後臺產生驗證碼後臺驗證
直接跳severlet在java後臺生成驗證碼:@RequestMapping(value="yzm.action") public void Yzm(HttpSession session,HttpServletResponse resp){ // 驗證碼圖片的寬度
python 實現傳送手機簡訊驗證碼後臺方法
1、生成4位數字驗證碼 def createPhoneCode(session): chars=['0','1','2','3','4','5','6','7','8','9'] x = random.choice(chars),random.choice(
Java Swing 圖形界面實現驗證碼(驗證碼可動態刷新)
string ble urn repaint xtend efault event adapt 內容 import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.To
java 企業網站源碼 後臺 springmvc SSM 前臺 靜態化 代碼生成器
sql腳本 數據 批量上傳 描述 -- 運營商 定時器 技術團隊 管理 前臺: 支持三套模版, 可以在後臺切換 系統介紹: 1.網站後臺采用主流的 SSM 框架 jsp JSTL,網站後臺采用freemaker靜態化模版引擎生成html 2.因為是生成的html,所
java 企業 網站源碼 後臺 springmvc SSM 前臺 靜態化 代碼生成器
java前臺: 支持四套模版, 可以在後臺切換系統介紹:1.網站後臺采用主流的 SSM 框架 jsp JSTL,網站後臺采用freemaker靜態化模版引擎生成html2.因為是生成的html,所以訪問速度快,輕便,對服務器負擔小3.網站前端采用主流的響應式布局,同一頁面同時支持PC、平板、手機(三合一)瀏覽
java 生產運算驗證碼&隨機驗證碼
public class ValidateCodeUtil { // 圖片的寬度。 private int width = 160; // 圖片的高度。 private int height = 40; // 驗證碼干擾線數 p
js編寫驗證碼以及驗證
範圍 toupper window .get 保存 以及 += ova col <style>#code{ font-family:Arial; font-style:italic; font-weight:bold; border:0; l
短信驗證碼之驗證碼回顯
攻擊 info 技術 res 朋友 驗證 -a ext bubuko 短信驗證碼之驗證碼回顯 前序 驗證碼回顯的安全問題主要出在研發人員關於賬號安全體系的認識。存在一些邏輯問題導致。而由於意識問題,一處的邏輯問題,則可能會導致賬號註冊、密碼找回等更加高危的風險。從而影響
建立微博cookie池準備 收集微博驗證碼 建立驗證碼資料庫
登入微博weibo.cn會出現驗證碼驗證 可以排列組合算出4*3*2*1=24種,所以可以先用selenium模擬登入擷取這些驗證碼,方便之後獲取cookie時登入驗證,在驗證碼資料庫中匹配,所以寫了這麼一個指令碼獲取驗證碼,其實效率不是很高 ,可以多程序操作,或者用selenium模擬人
案例字母數字驗證碼並驗證驗證碼
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <
thinkphp 如何使用內建的驗證碼規則驗證
看了手冊,一臉矇蔽,完全不知道手冊寫的什麼: 不廢話 直接寫案例 第一步 驗證器中的驗證規則如下: namespace app\index\validate; use think\Validate; class User extends Validate { protected $ru
DefaultKaptcha生成驗證碼+伺服器驗證碼亂碼問題
現在很多都是手機簡訊驗證碼,也有需求是圖片驗證碼,很多都是awt和swing來實現 都是手畫比較麻煩 也沒看到有好的工具類來實現 看了一些後 發現一個DefaultKaptcha goole下面的 還挺好用的 1.kaptcha相關介紹 Kaptcha是一個
python 爬蟲 如何通過scrapy簡單模擬登陸豆瓣網,手動進行圖形驗證碼的驗證
1.建立scrapy爬蟲程式,在terminal命令列輸入’scrapy startproject douban_login’ 2.建立爬蟲主程式,主要步驟都在這裡實現,以douban_login.py命名 程式程式碼如下: import scrapy from
【驗證碼】驗證碼生成類
import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.H
Laravel5.5生成驗證碼與驗證正確與否
第一步:引入gregwar/captcha包: composer require gregwar/captcha 第二步:在幫助函式中建立函式: use Gregwar\Captcha\CaptchaBuilder; use Illuminate\Http\Reques
js生成驗證碼並驗證
<html> <head> <title>驗證碼</title> <style type="text/css"> #code { font-family:Arial; font
python 驗證碼 高階驗證
1111000111111000111111100001111100000011 1110111011110111011111011110111100110111 1001110011110111101011011010101101110111 110111111111011010111111010111
LoadRunner使用者驗證碼和驗證碼使用指令碼
Action() { //定義Md5變數用來存放使用md5加密後的字串 char Md5[33]; //存放包含使用者登入資訊的URL char str[174]; //存放使用者賬戶資訊 char str1[92]; //存放當前時間 int
SSM框架下實現驗證碼圖片驗證功能(原始碼)
SSM框架下實現驗證碼圖片驗證功能 背景圖片資源路徑 https://download.csdn.net/download/hero_qhz/10322064 一、首先,在pom裡面加上需要用的資源jar包等,並且加上驗證圖片的引用圖片路徑,否則專案啟動會報找不到圖片資源的錯
呼叫簡訊介面傳送驗證碼,並對驗證碼進行驗證
首先需要對簡訊介面內容進行封裝: public class SendMsg2Util { private static String url="http://gw.api.taobao.com/router/rest"; private static Str