The generation and use of Chinese character verification code

Source: Internet
Author: User
Tags border color set background stringbuffer

First, create a new Servet to generate the random character verification code

Drawimage.class

Package xwcms.net.service;

Import Java.awt.Color;
Import Java.awt.Font;
Import Java.awt.Graphics;
Import Java.awt.Graphics2D;
Import Java.awt.image.BufferedImage;
Import java.io.IOException;
Import Java.util.Random;

Import Javax.imageio.ImageIO;
Import javax.servlet.ServletException;
Import Javax.servlet.http.HttpServlet;
Import Javax.servlet.http.HttpServletRequest;
Import Javax.servlet.http.HttpServletResponse;


/**
* Generate random characters
*
* Available @author XW material Network
*
*/
public class DrawImage extends HttpServlet {
public static final int WIDTH = 120;
public static final int HEIGHT = 30;


public void doget (HttpServletRequest request, httpservletresponse response)
Throws Servletexception, IOException {
This.dopost (request, response);
}


public void DoPost (HttpServletRequest request, httpservletresponse response)
Throws Servletexception, IOException {
Request.setcharacterencoding ("Utf-8");
Response.setcontenttype ("Text/html;charset=utf-8");
Create cache
BufferedImage bi = new BufferedImage (WIDTH, HEIGHT,
BUFFEREDIMAGE.TYPE_INT_RGB);
Get Canvas
Graphics g = bi.getgraphics ();


Set Back Color
SetBackground (g);
Set border
SetBorder (g);
Draw interference Lines
Drawrandomline (g);
Write random number
String random = Drawrandomnum ((graphics2d) g);
The existence of random Chinese characters in the session
Request.getsession (). SetAttribute ("Checkcode", random);
Writing a graphic to a browser
Response.setcontenttype ("Image/jpeg");
Header control browser do not cache
Response.setdateheader ("Expries",-1);
Response.setheader ("Cache-control", "No-cache");
Response.setheader ("Pragma", "No-cache");
Write a picture to a browser
Imageio.write (BI, "JPG", Response.getoutputstream ());
}


/**
* Set Background color
*
* @param g
*/
private void SetBackground (Graphics g) {
Set color
G.setcolor (Color.White);
Fill Area
G.fillrect (0, 0, WIDTH, HEIGHT);


}


/**
* Set Border
*
* @param g
*/
private void SetBorder (Graphics g) {
Set Border color
G.setcolor (Color.Blue);
Border area
G.drawrect (1, 1, WIDTH-2, HEIGHT-2);
}


/**
* Draw Random lines
*
* @param g
*/
private void Drawrandomline (Graphics g) {
Set color
G.setcolor (Color.green);
Set the number of lines and draw lines
for (int i = 0; i < 5; i++) {
int x1 = new Random (). Nextint (WIDTH);
int y1 = new Random (). Nextint (HEIGHT);
int x2 = new Random (). Nextint (WIDTH);
int y2 = new Random (). Nextint (HEIGHT);
G.drawline (x1, y1, x2, y2);
}


}


/**
* Draw Random characters
*
* @param g
* @return
*/
Private String Drawrandomnum (graphics2d g) {
StringBuffer sb = new StringBuffer ();
Set color
G.setcolor (color.red);
Set font
G.setfont (New Font ("Arial", Font.Bold, 20));
Prepare common Chinese character sets
String base = "\u7684\u4e00\u4e86\u662f\u6211\u4e0d\u5728\u4eba\u4eec\u6709\u6765\u4ed6\u8fd9\u4e0a\u7740\u4e2a\ U5730\u5230\u5927\u91cc\u8bf4\u5c31\u53bb\u5b50\u5f97\u4e5f\u548c\u90a3\u8981\u4e0b\u770b\u5929\u65f6\u8fc7\ U51fa\u5c0f\u4e48\u8d77\u4f60\u90fd\u628a\u597d\u8fd8\u591a\u6ca1\u4e3a\u53c8\u53ef\u5bb6\u5b66\u53ea\u4ee5\ U4e3b\u4f1a\u6837\u5e74\u60f3\u751f\u540c\u8001\u4e2d\u5341\u4ece\u81ea\u9762\u524d\u5934\u9053\u5b83\u540e\ U7136\u8d70\u5f88\u50cf\u89c1\u4e24\u7528\u5979\u56fd\u52a8\u8fdb\u6210\u56de\u4ec0\u8fb9\u4f5c\u5bf9\u5f00\ U800c\u5df1\u4e9b\u73b0\u5c71\u6c11\u5019\u7ecf\u53d1\u5de5\u5411\u4e8b\u547d\u7ed9\u957f\u6c34\u51e0\u4e49\ U4e09\u58f0\u4e8e\u9ad8\u624b\u77e5\u7406\u773c\u5fd7\u70b9\u5fc3\u6218\u4e8c\u95ee\u4f46\u8eab\u65b9\u5b9e\ U5403\u505a\u53eb\u5f53\u4f4f\u542c\u9769\u6253\u5462\u771f\u5168\u624d\u56db\u5df2\u6240\u654c\u4e4b\u6700\ U5149\u4ea7\u60c5\u8def\u5206\u603b\u6761\u767d\u8bdd\u4e1c\u5e2d\u6b21\u4eb2\u5982\u88ab\u82b1\u53e3\u653e\ U513f\u5e38\u6c14\u4e94\U7b2c\u4f7f\u5199\u519b\u5427\u6587\u8fd0\u518d\u679c\u600e\u5b9a\u8bb8\u5feb\u660e\u884c\u56e0\u522b\u98de\ U5916\u6811\u7269\u6d3b\u90e8\u95e8\u65e0\u5f80\u8239\u671b\u65b0\u5e26\u961f\u5148\u529b\u5b8c\u5374\u7ad9\ U4ee3\u5458\u673a\u66f4\u4e5d\u60a8\u6bcf\u98ce\u7ea7\u8ddf\u7b11\u554a\u5b69\u4e07\u5c11\u76f4\u610f\u591c\ U6bd4\u9636\u8fde\u8f66\u91cd\u4fbf\u6597\u9a6c\u54ea\u5316\u592a\u6307\u53d8\u793e\u4f3c\u58eb\u8005\u5e72\ U77f3\u6ee1\u65e5\u51b3\u767e\u539f\u62ff\u7fa4\u7a76\u5404\u516d\u672c\u601d\u89e3\u7acb\u6cb3\u6751\u516b\ U96be\u65e9\u8bba\u5417\u6839\u5171\u8ba9\u76f8\u7814\u4eca\u5176\u4e66\u5750\u63a5\u5e94\u5173\u4fe1\u89c9\ U6b65\u53cd\u5904\u8bb0\u5c06\u5343\u627e\u4e89\u9886\u6216\u5e08\u7ed3\u5757\u8dd1\u8c01\u8349\u8d8a\u5b57\ U52a0\u811a\u7d27\u7231\u7b49\u4e60\u9635\u6015\u6708\u9752\u534a\u706b\u6cd5\u9898\u5efa\u8d76\u4f4d\u5531\ U6d77\u4e03\u5973\u4efb\u4ef6\u611f\u51c6\u5f20\u56e2\u5c4b\u79bb\u8272\u8138\u7247\u79d1\u5012\u775b\u5229\ u4e16\u521a\u4e14\u7531\u9001\u5207\u661f\u5bfc\u665a\u8868\u591f\u6574\u8ba4\u54cd\u96ea\u6d41\u672a\u573a\u8be5\u5e76\u5e95\u6df1\u523b\ u5e73\u4f1f\u5fd9\u63d0\u786e\u8fd1\u4eae\u8f7b\u8bb2\u519c\u53e4\u9ed1\u544a\u754c\u62c9\u540d\u5440\u571f\ u6e05\u9633\u7167\u529e\u53f2\u6539\u5386\u8f6c\u753b\u9020\u5634\u6b64\u6cbb\u5317\u5fc5\u670d\u96e8\u7a7f\ U5185\u8bc6\u9a8c\u4f20\u4e1a\u83dc\u722c\u7761\u5174\u5f62\u91cf\u54b1\u89c2\u82e6\u4f53\u4f17\u901a\u51b2\ U5408\u7834\u53cb\u5ea6\u672f\u996d\u516c\u65c1\u623f\u6781\u5357\u67aa\u8bfb\u6c99\u5c81\u7ebf\u91ce\u575a\ U7a7a\u6536\u7b97\u81f3\u653f\u57ce\u52b3\u843d\u94b1\u7279\u56f4\u5f1f\u80dc\u6559\u70ed\u5c55\u5305\u6b4c\ U7c7b\u6e10\u5f3a\u6570\u4e61\u547c\u6027\u97f3\u7b54\u54e5\u9645\u65e7\u795e\u5ea7\u7ae0\u5e2e\u5566\u53d7\ U7cfb\u4ee4\u8df3\u975e\u4f55\u725b\u53d6\u5165\u5cb8\u6562\u6389\u5ffd\u79cd\u88c5\u9876\u6025\u6797\u505c\ U606f\u53e5\u533a\u8863\u822c\u62a5\u53f6\u538b\u6162\u53d4\u80cc\u7ec6 ";
int x = 5;
Control word Count
for (int i = 0; i < 4; i++) {
Set Font rotation angle
int degree = new Random (). Nextint ()% 30;
Interception of Chinese characters
String ch = base.charat (new Random (). Nextint (Base.length ())) + "";
Sb.append (CH);
Forward Angle
G.rotate (Degree * math.pi/180, X, 20);
g.DrawString (CH, x, 20);
Reverse angle
G.rotate (-degree * math.pi/180, X, 20);
x + = 30;
}
return sb.tostring ();
}
}


A simple JSP page

<body>
<table width= "100%" border= "0" cellspacing= "0" cellpadding= "0" >
<tr>
&LT;TD width= ">&nbsp;</td>"
&LT;TD width= "" > Verification Code:</td>
&LT;TD width= "><input id=" Verycode "name=" Verycode "type=" text "class=" Yzm "onkeyup=" Isrightcode () "/> </td>
&LT;TD width= "135" ></td>
<td><a href= "#" onclick= "changeimg ()" > Change </a></td>
<td></td>
</tr>
<tr>
&LT;TD style= "LINE-HEIGHT:38PX; Color: #FF0000; Text-align:center; "colspan=" 4 "id=" info ">&nbsp;</td>
<td></td>
</tr>
</table>



<script type= "Text/javascript" src= "Js/jquery.js" ></script>
<script type= "Text/javascript" src= "Js/verifycode.js" ></script>
</body>

Create a new servlet to determine if the verification code is correct Resultservlet


Resultservlet.class

Package xwcms.net.service;


Import java.io.IOException;
Import Java.io.PrintWriter;


Import javax.servlet.ServletException;
Import Javax.servlet.http.HttpServlet;
Import Javax.servlet.http.HttpServletRequest;
Import Javax.servlet.http.HttpServletResponse;


public class Resultservlet extends HttpServlet {


/**
*
*/
Private static final long serialversionuid = 1L;


public void doget (HttpServletRequest request, httpservletresponse response)
Throws Servletexception, IOException {


DoPost (request, response);
}


public void DoPost (HttpServletRequest request, httpservletresponse response)
Throws Servletexception, IOException {


Response.setcontenttype ("Text/html;charset=utf-8");


Get the verification code in session
String Validatec = (string) request.getsession (). getattribute (
"Checkcode");


Get Verification code text for a page
String Verycode = Request.getparameter ("C");


PrintWriter out = Response.getwriter ();
if (Verycode = = NULL | | "". Equals (Verycode)) {
Out.println ("Please enter the verification code. ");
} else {
if (Validatec.equals (Verycode)) {
OUT.PRINTLN (1);


Out.write (1);
} else {
Out.println (Validatec + "CAPTCHA input error. ");
}
}
Out.flush ();
Out.close ();
}


}

Use jquery for a click to change a verification code



Click to change a verification code
function changeimg () {
var imgsrc = $ ("#imgObj");
var src = imgsrc.attr ("src");
Imgsrc.attr ("src", Chgurl (SRC));
$ ("#info"). HTML ("");
}
Time stamp
In order to make the picture inconsistent each time, that is, do not let the browser read cache, so you need to add a timestamp
function Chgurl (URL) {
var timestamp = (new Date ()). ValueOf ();
url = url.substring (0, 17);
if ((Url.indexof ("&") >= 0)) {
url = url + "xtamp=" + timestamp;
} else {
url = url + "? timestamp=" + timestamp;
}
return URL;
}
Verification Code Verification
function Isrightcode () {
var code = $ ("#veryCode"). attr ("value");
Alert (code);
Code = "C=" + code;

Use Ajax to verify that random numbers are correct
$.ajax ({
Type: "POST",
URL: "Resultservlet",
Data:code,
Success:callback
});
}
Verify that the submission or error message is processed later
function callback (data) {
if (data.tostring () ==1)
{
$ ("#info"). HTML ("Verify code is correct");
Return
}else
{
$ ("#info"). HTML (data);
Return
}
}


Summary: The essence of the verification code is to create a servlet image, the verification code needs to verify the contents of the session saved up.

Accept the input from the user and determine if the verification code is correct.



Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.