`
Listen_ing
  • 浏览: 36727 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

验证码相关

 
阅读更多
public class RandomNumUtil {


      private ByteArrayInputStream image;//图像  
        private String str;//验证码  
          
        private RandomNumUtil(){  
            init();//初始化属性  
        }  
        /*
         * 取得RandomNumUtil实例
         */
        public static RandomNumUtil Instance(){  
            return new RandomNumUtil();  
        }  
        /*
         * 取得验证码图片
         */
        public ByteArrayInputStream getImage(){  
            return this.image;  
        }  
        /*
         * 取得图片的验证码
         */
        public String getString(){  
            return this.str;  
        }  
          
        private void init() {  
            //       在内存中创建图象  
            int width=85, height=20;  
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  
            //       获取图形上下文  
            Graphics g = image.getGraphics();  
            //      生成随机类  
            Random random = new Random();  
            //       设定背景色  
            g.setColor(getRandColor(200,250));  
            g.fillRect(0, 0, width, height);  
            //      设定字体  
            g.setFont(new Font("Times New Roman",Font.PLAIN,18));  
            //       随机产生155条干扰线,使图象中的认证码不易被其它程序探测到  
            g.setColor(getRandColor(160,200));  
            for (int i=0;i<155;i++)  
            {  
             int x = random.nextInt(width);  
             int y = random.nextInt(height);  
                    int xl = random.nextInt(12);  
                    int yl = random.nextInt(12);  
             g.drawLine(x,y,x+xl,y+yl);  
            }  
            //       取随机产生的认证码(6位数字)  
            String sRand="";  
            for (int i=0;i<6;i++){  
                String rand=String.valueOf(random.nextInt(10));  
                sRand+=rand;  
                // 将认证码显示到图象中  
                g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));  
                //      调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成  
                g.drawString(rand,13*i+6,16);   
            }
            //赋值验证码
            this.str=sRand;
           
            //图象生效  
            g.dispose();  
            ByteArrayInputStream input=null;  
            ByteArrayOutputStream output = new ByteArrayOutputStream();  
            try{  
                ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);  
                ImageIO.write(image, "JPEG", imageOut);  
                imageOut.close();  
                input = new ByteArrayInputStream(output.toByteArray());  
            }catch(Exception e){  
                System.out.println("验证码图片产生出现错误:"+e.toString());  
            }  
              
            this.image=input;/* 赋值图像 */
        }  
        /*
         * 给定范围获得随机颜色
         */
        private Color getRandColor(int fc,int bc){  
            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);  
       }


}


验证码action类

public class RandomAction extends BasicAction{


     private ByteArrayInputStream inputStream;  
        public String execute() throws Exception{  
            RandomNumUtil rdnu=RandomNumUtil.Instance();  
            this.setInputStream(rdnu.getImage());//取得带有随机字符串的图片  
            ActionContext.getContext().getSession().put("random", rdnu.getString());//取得随机字符串放入HttpSession 
           
            return SUCCESS;  
        }  
        public void setInputStream(ByteArrayInputStream inputStream) {  
            this.inputStream = inputStream;  
        }  
        public ByteArrayInputStream getInputStream() {  
            return inputStream;  
        }
}




用户登录前打验证方法,主要说用于验证验证码的正确与否



    public void validateLoginUser() throws Exception{
       String arandom=(String)(ActionContext.getContext().getSession().get("random"));
       try {
           if(arandom !=null){
              String validateCode=arandom.toString();
              if(rand != null && !rand.equals(validateCode)){
                  this.addFieldError("rand","验证码错误!");
              }
           }
       } catch (Exception e) {
           LOG.error("拉取验证码失败",e);
           throw e;
       }
    }
分享到:
评论

相关推荐

    和验证码相关的图片数据集

    和验证码相关的图片数据集 数据说明: ·图像:包含PNG格式的验证码图像的文件夹。 ·Labels:包含两列的CSV文件:image_filename和文本。imagefilename对应于CAPTCHA图像的文件名,text包含CAPTCHA中描述的字母数字文本...

    安卓验证码相关-自定义布局验证码.rar

    这个压缩包"安卓验证码相关-自定义布局验证码.rar"显然包含了关于如何在Android应用中实现自定义验证码布局的相关资源。让我们深入探讨一下这个话题。 验证码通常包含随机生成的一串字符或者一组图片,用户需要输入...

    安卓验证码相关-验证码助手SmsCodeHelper.zip

    【验证码技术概述】 ...总的来说,SmsCodeHelper是一个有助于理解和实现安卓短信验证码处理的工具,通过学习其源码,开发者可以掌握验证码相关的技术,并能应用于自己的项目中,提高应用的安全性和用户体验。

    安卓验证码相关-android本地验证码生成.rar

    本压缩包"安卓验证码相关-android本地验证码生成.rar"包含了一些关于在Android平台上实现本地验证码生成的源码和资料。下面将详细介绍验证码的原理以及如何在Android中实现。 验证码的原理: 验证码是一种“全自动...

    安卓验证码相关-短信验证码.rar

    这个压缩包"安卓验证码相关-短信验证码.rar"包含了与短信验证码实现相关的资源,可能包括源码示例和一些文档。虽然不能确保每个文件都能直接运行,但它们可以作为学习和参考的材料。 短信验证码的基本原理是:当...

    安卓验证码相关-第三方验证码免费简单详细Android.zip

    本资源"安卓验证码相关-第三方验证码免费简单详细Android.zip"提供了一些关于如何在Android平台上集成第三方验证码服务的资料。下面将详细介绍验证码在Android中的应用和相关知识点。 首先,验证码的种类主要有图像...

    安卓验证码相关-随机图片验证码适合登录页面使用点击更换输入错误自动更换.rar

    本文将深入探讨"安卓验证码相关-随机图片验证码适合登录页面使用点击更换输入错误自动更换.rar"这个压缩包所包含的知识点。 首先,随机图片验证码是一种基于图像的验证方式,它的核心思想是生成一串随机字符,并将...

    Qt实现验证码相关功能

    Qt实现验证码相关功能: 1.在QT Designer中创建一个UI界面,添加一个Label标签,两个Button按钮以及一个lineEdit输入框 2.设置Label标签:将Label标签设置为显示验证码。你可以使用QLabel类来创建标签,并设置其...

    安卓验证码相关-Android随机验证码.rar

    这个名为“安卓验证码相关-Android随机验证码.rar”的压缩包文件显然包含了与实现Android平台上的随机验证码功能相关的资源。以下是对其中可能包含的知识点的详细说明: 1. **验证码的基本原理**: 验证码...

    安卓验证码相关-Android随机验证码(2).rar

    本文将深入探讨如何在Android平台上实现随机验证码的功能,以及相关的技术要点。 验证码的核心在于生成难以被算法识别的随机字符串或图像,同时确保用户可以轻松读取并输入。在Android中,我们可以采用两种常见的...

    安卓验证码相关-1420725588121一个随机数产生实例.rar

    这个压缩包文件"安卓验证码相关-1420725588121一个随机数产生实例.rar"可能包含了一个关于如何在Android平台上生成验证码的示例。验证码通常涉及到随机数的生成,而随机数在安全性和不可预测性方面有着严格的要求。 ...

    爱码验证码飞Q验证码手机验证码模块

    手机验证码在IT行业中扮演着重要的角色,特别是在网络安全和身份验证方面。...本模块结合了“爱码”和“飞Q”这两个知名的验证码服务平台...通过该模块,开发者可以更加专注于核心业务逻辑,而无需担心验证码相关的问题。

    SSM实现登录验证码功能

    - 在SpringMVC配置中,定义验证码相关的Controller映射。 - 在Spring配置中,配置Session管理,确保在服务器端能正确存储和读取Session数据。 - MyBatis在此处主要涉及用户登录的数据库操作,可能包括查询用户...

    验证码生成工具类

    完整的包名可能是`cn.somecompany.captcha`,其中包含了验证码相关的类和接口。 总的来说,Java验证码生成工具类是一个实用的安全组件,它结合了随机数生成、图像处理和字符串操作等技术,为Web应用提供了有效的...

    asp.net mvc验证码实现

    - 为了防止跨站请求伪造(CSRF),在验证验证码时,应同时检查一个与验证码相关的隐藏字段,确保请求来自同一会话。 - 定期更新会话中的验证码,防止长时间未使用的验证码被恶意用户利用。 - 考虑使用更安全的...

    安卓验证码相关-Android随机生成验证码View支持数字字母数字字母混合汉子验证码可以设置验证码位数等.rar

    Android随机生成验证码View,支持数字,字母,数字字母混合,汉子验证码,可以设置验证码位数等.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    验证码相关实例 ASP.NET

    验证码在Web应用中扮演着重要的角色,主要用于防止自动化的机器人程序进行恶意操作,例如注册、登录、评论等。本实例是关于ASP.NET平台下验证码的实现,它将帮助你理解和掌握如何在你的ASP.NET应用程序中集成验证码...

    Java项目_DRP完整版_资料_验证码相关资料

    Java项目_DRP完整版_资料_验证码相关资料

    安卓验证码相关-对手机号码进行发送验证码.rar

    对手机号码进行发送验证码.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

Global site tag (gtag.js) - Google Analytics