验证码(随机数字+字符,数字加减)
来源:互联网 发布:怎样在淘宝开店铺 编辑:程序博客网 时间:2024/06/08 17:12
<div>
<span style="white-space:pre"></span><img<span style="white-space:pre"></span>id="dl_i_code" src="<%=request.getContextPath()%>/user/identifyingCode.yhb">
<span style="white-space:pre"></span><a href="javascript:refushCode('dl');" title="换一批">换一批</a></div>
@RequestMapping(value = "user/identifyingCode.yhb")@ResponseBodypublic String identifyingCode(HttpServletRequest request,HttpServletResponse response) {response.setContentType("image/jpeg");// 设置相应类型,告诉浏览器输出的内容为图片response.setHeader("Pragma", "No-cache");// 设置响应头信息,告诉浏览器不要缓存此内容response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expire", 0);IdentifyingCode randomValidateCode = new IdentifyingCode();try {randomValidateCode.getRandcode(request, response);// 输出图片方法} catch (Exception e) {e.printStackTrace();}return "NONE";}
public class IdentifyingCode {public static final String RANDOMCODEKEY = "RANDOMVALIDATECODEKEY";// 放到session中的keyprivate Random random = new Random();//private String randString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";// 随机产生的字符串private String randString = "0123456789";// 随机产生数字private String randFH="+-x";private String randZF="我爱中国游伙伴";private int width = 80;// 图片宽private int height = 33;// 图片高private int lineSize = 40;// 干扰线数量private int stringNum = 1;// 随机产生字符数量/* * 获得字体 */private Font getFont() {return new Font("Fixedsys", Font.CENTER_BASELINE, 18);}/* * 获得颜色 */private Color getRandColor(int fc, int bc) {if (fc > 255)fc = 255;if (bc > 255)bc = 255;int r = fc + random.nextInt(bc - fc - 16);//110+7int g = fc + random.nextInt(bc - fc - 14);//110+9int b = fc + random.nextInt(bc - fc - 18);//110+5return new Color(r, g, b);}/** * 生成随机图片 */public void getRandcode(HttpServletRequest request,HttpServletResponse response) {HttpSession session = request.getSession();// BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_BGR);Graphics g = image.getGraphics();// 产生Image对象的Graphics对象,改对象可以在图像上进行各种绘制操作g.fillRect(0, 0, width, height);g.setFont(new Font("Times New Roman", Font.ROMAN_BASELINE, 18));g.setColor(getRandColor(110, 133));// 绘制干扰线for (int i = 0; i <= lineSize; i++) {drowLine(g);}// 绘制随机字符String randomString = "";for (int i = 1; i <= stringNum; i++) {randomString = drowString(g, randomString, i);}char [] stringArr = randomString.toCharArray();if(stringArr[1]=='+'){randomString=String.valueOf(Integer.parseInt(String.valueOf(stringArr[0]))+Integer.parseInt(String.valueOf(stringArr[2]))); }else if(stringArr[1]=='-'){randomString=String.valueOf(Integer.parseInt(String.valueOf(stringArr[0]))-Integer.parseInt(String.valueOf(stringArr[2]))); }else if(stringArr[1]=='x'){randomString=String.valueOf(Integer.parseInt(String.valueOf(stringArr[0]))*Integer.parseInt(String.valueOf(stringArr[2]))); }session.removeAttribute(RANDOMCODEKEY);session.setAttribute(RANDOMCODEKEY, randomString);g.dispose();try {ImageIO.write(image, "JPEG", response.getOutputStream());// 将内存中的图片通过流动形式输出到客户端} catch (Exception e) {e.printStackTrace();}}/* * 绘制字符串 *///private String drowString(Graphics g, String randomString, int i) {//g.setFont(getFont());////String rand ="";////if(i==5){//g.setColor(new Color(230,0,0));//rand=getRandomString2(random.nextInt(randZF.length()));//}else{//g.setColor(new Color(random.nextInt(101), random.nextInt(111), random//.nextInt(121)));//rand = String.valueOf(getRandomString(random.nextInt(randString//.length())));//}//randomString += rand;//g.translate(random.nextInt(4), random.nextInt(4));//g.drawString(rand, 13 * i, 24);//return randomString;//}private String drowString(Graphics g, String randomString, int i) {g.setFont(getFont());g.setColor(new Color(random.nextInt(101), random.nextInt(111), random.nextInt(121)));String rand1 = String.valueOf(getRandomString(random.nextInt(randString.length())));String rand2 = String.valueOf(getRandomString(random.nextInt(randString.length())));String rand3 = String.valueOf(getRandomStringFH(random.nextInt(randFH.length())));randomString += rand1+rand3+rand2+"=";g.translate(random.nextInt(2), random.nextInt(2));g.drawString(randomString, 13 * i, 24);return randomString;}/* * 绘制干扰线 */private void drowLine(Graphics g) {int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(13);int yl = random.nextInt(15);g.drawLine(x, y, x + xl, y + yl);}/* * 获取随机的字符 */public String getRandomString(int num) {return String.valueOf(randString.charAt(num));}/* * 获取随机的汉字 */public String getRandomString2(int num) {return String.valueOf(randZF.charAt(num));}/* * 获取随机的运算符号 */public String getRandomStringFH(int num) {return String.valueOf(randFH.charAt(num));}}许多验证码都类似,参考一下就行了
0 0
- 验证码(随机数字+字符,数字加减)
- 生成x位随机数字密码、验证码、字符密码
- ASP数字、字母验证码(带随机杂点)
- 验证码(随机产生字母和数字)
- 随机数字验证码的生成
- asp.net随机数字验证码
- 生成随机数字的图片验证码
- java生成随机数字验证码图片
- ASP随机四位数字验证码
- ssh生成随机数字验证码
- 输出随机数字验证码图片
- java随机生成数字字母验证码
- Java 获取随机验证码数字
- 【数字加减】
- 关于数字和字符之间的加减
- 字符数字随机生成源码
- 验证码制作之三:通过ASCEE码随机生成4位字符与数字验证码
- 随机验证码生成(生成一个含有n位随机数字的字符串)
- cocos2d-x播放视频(VideoPlayer)小记
- C/C++中文件输入输出流的一个示例(使用list容器)
- sharepoint adfs Adding Claims to an Existing Token Issuer in SharePoint 2010
- Linux 系统下文件信息的查询
- HDU-2007
- 验证码(随机数字+字符,数字加减)
- C#泛型-使用委托的Sort排序方法
- 解题报告 之 POJ1226 Substrings
- 4.1.3LeetCode: Largest Rectangle in Histogram(直方图最大面积)
- fragment问题,不知道怎么解决
- Node.js回调概念
- ASP.NET 上传控件 “Maximum request length exceeded” 异常
- 用Eclipse调试Node.js代码
- JNI 的应用