web動態驗證碼的實現
執行結果:
如果輸入錯誤,滑鼠在輸入框之外點選則
輸入正確則不會顯示出
點選提交跳轉到成功的頁面,注意此時搜尋欄已經變化
演算法實現
動態驗證碼實現首先得有一個演算法。
定義一個陣列用來存放生成的驗證碼
String ver[] = new String[62];
第一種,定義一個字串陣列,由0-9,a-z,A-Z組成,共62
public void init(){
for(int i = 0;i < 10;i ++){
ver[i] = new Integer(i).toString();
}
//97-122是a
for(int i = 0;i < 26;i ++){
ver[i + 10] = new Character((char)(97 + i)).toString();
}
//65-90是A-Z
for(int i = 0;i < 26;i ++){
ver[i + 36] = new Character((char)(65 + i)).toString();
}
}
第二種方法,生成隨機的數字和字母
private String getValidateCode(){
StringBuffer vali = new StringBuffer();
for(int i = 0;i < 4;i ++){
vali.append(ver[(int)(Math.random() * 36)]);
}
return vali.toString();
}
生成驗證碼servlet
這裡用第一種方法生成驗證碼
生成驗證碼程式碼:
public class yzmServlet extends HttpServlet{
String ver[] = new String[62]
public void init(){
for(int i = 0;i < 10;i ++){
ver[i] = new Integer(i).toString();
}
//97-122是a
for(int i = 0;i < 26;i ++){
ver[i + 10] = new Character((char)(97 + i)).toString();
}
//65-90是A-Z
for(int i = 0;i < 26;i ++){
ver[i + 36] = new Character((char)(65 + i)).toString();
}
}
//第二部獲取繪圖能力
public void doGet(HttpServletRequest request,HttpServletResponse response){
try {
//設定影像輸出
response.setContentType("image/jpeg");
//獲取輸出流
OutputStream os = response.getOutputStream();
//在記憶體中準備一個image
BufferedImage image = new BufferedImage(60,30,BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
//繪圖
g.setColor(new Color(200,200,200));
g.fillRect(0, 0, 80, 50);
//生成並繪製隨機字串
String vali = "";
for(int i = 0;i < 4;i ++){
String v = (ver[(int)(Math.random()*36)]);
vali += v;
g.setColor(new Color((int)(Math.random()*150),(int)(Math.random()*150),(int)(Math.random()*150)));
g.drawString(v, 8 * i + 10, 15);
}
g.dispose();
//建立session,設定屬性
HttpSession session = request.getSession();
session.setAttribute("vali", vali);
} catch (Exception e) {
// TODO: handle exception
}
}}
這個session主要是要傳送驗證碼到進行驗證的servlet比對
HttpSession session = request.getSession();
session.setAttribute("vali", vali);
驗證的servlet
public class A extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String yzm = request.getParameter("yzm");
String a = (String)request.getSession().getAttribute("vali");
System.out.println(a+"==="+yzm);
if(!(yzm.equals((String)request.getSession().getAttribute("vali")))){
response.getWriter().write("wrong");
}}
}
這裡用到Ajax的內容
jsp頁面
<script type="text/javascript">
function chenyang() {
//1.獲取yzm標籤,併為其新增onclick響應函式
var yzm = document.getElementById("yzm").value
//3.建立一個XMLHttpRequest物件
var res = new XMLHttpRequest();
//4.準備傳送請求的資料:method 和 url
var method = "get";
var url = "A?yzm="+yzm
//5.呼叫xmlhttprequest物件的open方法
res.open(method, url);
//6.呼叫xmlhttprequest物件的send方法
res.send(null);
//7.為xmlhttprequest物件新增onreadystatechange響應函式
res.onreadystatechange = function() {
//8.決斷響應是否完成:xmlhttprequest物件的readystate屬性值為4
if (res.readyState == 4) {
//9.再決斷響應是否可用:xmlhttprequest物件status屬性值為200
if (res.status == 200) {
//10.列印響應結果:responseText
document.getElementById("message").innerHTML = res.responseText;
}
}}
}
</script>
</head>
<body>
<form action="Success.jsp" method="get">
驗證碼:<input type="text" name="yzm" id="yzm" onblur="chenyang()">
<img alt="" id="Img" src="yzmServlet" onclick="this.src=this.src+'?'+Math.random();" >
<div id="message">
<!-- 這裡接受servlet響應的結果 -->
</div>
<input type="submit">
</form>
</body>
</html>
相關文章
- 實現動態驗證碼的思路
- java實現動態驗證碼原始碼——繪製驗證碼的jspJava原始碼JS
- 影片直播原始碼,前端canvas動態驗證碼實現原始碼前端Canvas
- Web 端 實現 app “輸入驗證碼 ”的效果WebAPP
- 簡單幾步實現滑動驗證碼(後端驗證)後端
- easy-captcha實現驗證碼驗證APT
- Java Web(四) 一次性驗證碼的程式碼實現JavaWeb
- Django實現驗證碼Django
- java實現驗證碼Java
- rails實現驗證碼AI
- javascript實現的身份證號碼驗證程式碼JavaScript
- PHP算式驗證碼和漢字驗證碼的實現方法PHP
- 自動化驗證碼登入如何實現?
- canvas實現滑動驗證Canvas
- Ext實現的身份證格式驗證程式碼
- js實現身份證號碼驗證JS
- 滑動驗證碼實踐
- 驗證碼的原理、作用及實現
- javascript實現的驗證碼程式碼例項JavaScript
- java圖形驗證碼實現Java
- KgCaptcha驗證碼實現筆記GCAPT筆記
- Kubernetes 兩步驗證 - 使用 Serverless 實現動態准入控制Server
- vue+elementUI實現動態增加表單項並新增驗證VueUI
- C#滑動拼圖驗證碼實現筆記C#筆記
- Android中實現簡訊驗證碼自動填入Android
- javascript實現的身份證號碼合法性驗證程式碼JavaScript
- js實現的身份證合法性驗證程式碼JS
- canvas實現的驗證碼效果程式碼例項Canvas
- python傳送手機動態驗證碼Python
- jquery 實現滑動條的簡單驗證jQuery
- json web token 實踐登入以及校驗碼驗證JSONWeb
- Java實現郵箱驗證碼功能Java
- 圖形驗證碼設計實現
- 【Hover】ASP.Net實現驗證碼!ASP.NET
- js實現的郵箱格式驗證程式碼JS
- soket 利用http實現驗證碼的傳送HTTP
- Vue.js 滑動拼圖驗證碼實現筆記Vue.js筆記
- 基於Nuxt.js實現滑動拼圖驗證碼UXJS