精华内容
下载资源
问答
  • 获取短信验证码.zip

    2020-01-29 02:36:28
    易语言获取短信验证码 易语言获取短信验证码易语言获取短信验证码易语言获取短信验证码易语言获取短信验证码易语言获取短信验证码易语言获取短信验证码易语言获取短信验证码易语言获取短信验证码易语言获取短信...
  • Android获取短信验证码

    2015-06-01 16:54:57
    Android获取短信验证码,包含一个demo源码:receiveSMS
  • 获取短信验证码

    2018-11-27 14:39:35
    这是一种类似于秒滴短信的应用代码,来通过手机短信获取登陆的验证码,进行登陆
  • 如此当有短信收到时就可以将短信内容写到SD卡中的文件里在另一个java类中写个读取文件内容的方法,并在写测试用例过程中,将得到的String按验证码的具体位置截取即可。public String read(String str) throws ...

    如此当有短信收到时就可以将短信内容写到SD卡中的文件里

    在另一个java类中写个读取文件内容的方法,并在写测试用例过程中,将得到的String按验证码的具体位置截取即可。

    public String read(String str) throws IOException{

    File file=new File(str);

    FileInputStream fis=new FileInputStream(file);

    StringBuffer sb=new StringBuffer();

    BufferedInputStream bis=new BufferedInputStream(fis);

    BufferedReader  read = new BufferedReader (new InputStreamReader(bis));

    int c=0;

    while ((c=read.read())!=-1) {

    sb.append((char) c);

    }

    read.close();

    bis.close();

    fis.close();

    Log.i(TAG, sb.toString());

    String verify=sb.toString();

    return verify;

    }

    最后需要在manifest中增加申明,且注册权限

    测试过程中需要用到短信验证码时就可以实时获取了

    22/2<12

    展开全文
  • jquery表单中获取短信验证码倒计时 jquery表单中获取短信验证码倒计时 jquery表单中获取短信验证码倒计时 jquery表单中获取短信验证码倒计时
  • 注册登录或修改密码功能常常需要输入短信验证码,如何自动获取短信验证码,这篇文章就为大家介绍了Androidcv注册登录自动获取短信验证码的实现代码,感兴趣的小伙伴们可以参考一下
  • 自动获取短信验证码

    2015-10-26 14:56:32
    自动读取短信中的内容,获取指定格式的验证码。避免用户退出当前应用去查看短信中的验证码
  • 效果图: ...jquery表单获取短信验证码代码</title> [removed][removed] [removed] $(function(){ //获取短信验证码 var validCode=true; $(.msgs).click (function () { var time=30;
  • 注册帐号时,经常需要手机获取验证码,Android如何通过手机自动获取短信验证码,下面看看小编给大家分享的一段代码,感兴趣的小伙伴们可以参考一下
  • 获取短信验证码并自动填写demo
  • 获取短信验证码倒计时,在web开发,手机开发中都可以用到
  • 使用阿里云短信验证码API发送短信验证码使用此短信验证码可以进行注册、登录、密码重置等功能。相关的Java代码 使用此短信验证码可以进行注册、登录、密码重置等功能。 相关的Java代码 代码中我已经进行了详细的注释...

    获取阿里云短信验证码需要的配置信息。

    如果是新用户,可以免费领取3个月,老用户的话就只能购买了,但是也不贵。

    申请短信签名
    申请短信签名
    申请短信模板
    申请短信模板

    编写发送短信验证码的工具类

    代码中我已经进行了详细的注释,也写了一个生成6位随机数字的方法.

    如果有什么疑问,欢迎在评论里留言。

    package com.imlee.examsys.utils;
    
    import com.aliyuncs.CommonRequest;
    import com.aliyuncs.CommonResponse;
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.http.MethodType;
    import com.aliyuncs.profile.DefaultProfile;
    
    /**
     * @Author imlee
     * @Date 2019-08-31 14:49
     *
     * 调用阿里云短信验证码 API
     * 进行手机号码的验证
     */
    
    public class SendSms {
    
        //  自己账号的 accessKeyId
        private static final String accessKeyId = "";
        //  自己账号的 accessKeySecret
        private static final String accessKeySecret = "";
        //  自己账号的   短信签名名称
        private static final String signName = "";
        //  自己账号的   短信模板ID
        private static final String templateCode = "";
    
        /**
         *         发送短信验证码
         *
          * @param telephoneNumber  用户填写的手机号码
         * @return validateCode     该用户此次操作的短信验证码
         */
        public static String sendMessage(String telephoneNumber) {
    
            //  随机生成 6位 验证码
            String validateCode = String.valueOf((int)((Math.random() * 9 + 1) * 100000));
    
            DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
            IAcsClient client = new DefaultAcsClient(profile);
    
            CommonRequest request = new CommonRequest();
            //  请求方式  POST(默认)
            request.setMethod(MethodType.POST);
            //  阿里云短信服务器(默认)
            request.setDomain("dysmsapi.aliyuncs.com");
            //  版本号(默认)
            request.setVersion("2017-05-25");
            //  执行动作  发送短信 (默认)
            request.setAction("SendSms");
            request.putQueryParameter("RegionId", "cn-hangzhou");
            request.putQueryParameter("PhoneNumbers", telephoneNumber);
            request.putQueryParameter("SignName", signName);
            request.putQueryParameter("TemplateCode", templateCode);
            request.putQueryParameter("TemplateParam", "{\"code\":" + validateCode + "}");
    
            try {
                CommonResponse response = client.getCommonResponse(request);
    
                System.out.println(response.getData());
    
            } catch (ServerException e) {
                e.printStackTrace();
                return "抱歉,您的当前获取次数已达上限,请于下一个时段或明天再试!";
            } catch (ClientException e) {
                e.printStackTrace();
                return "系统异常,请重新获取!";
            }
    
            return validateCode;
        }
    
    }
    
    
    

    之前写的项目,和验证码相关的一些操作,将短信验证码保存到了redis中,使用它进行注册、登录、重置密码等操作。这个连载的代码都是自己写的,提供给需要的同学参考,如果有什么想要交流的,欢迎留言。

    此处进行获取短信验证码的操作。

    
    import com.imlee.examsys.pojo.JsonResult;
    import com.imlee.examsys.pojo.User;
    import com.imlee.examsys.service.UserService;
    import com.imlee.examsys.utils.SendSms;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.concurrent.TimeUnit;
    
    /**
     *      和验证码相关的后台接口
     *
     * @Author imlee
     * @Date 2019-09-02 10:10
     */
    @CrossOrigin
    @RestController
    public class ValidateController {
    
        //  注入 Redis
        @Autowired
        private StringRedisTemplate redisTemplate;
    
        @Autowired
        private UserService userService;
    
        /**
         *                      获取短信验证码
         *
         * @Author  imlee
         *
         * @param telephoneNumber   用户填写的手机号码
         * @return                  验证码发送成功的提示
         */
        @RequestMapping("/getCode.do")
        public JsonResult getCode(String telephoneNumber) {
    
            //  判断是否填写手机号码
            if (telephoneNumber == null) {
                //  未填写手机号码,返回失败提示
                return new JsonResult(0, "请输入手机号码!");
            }
    
            //  判断用户填写的手机号码是否合法
            if (!telephoneNumber.matches("^1(([358]\\d)|66|76|77|99)\\d{8}$")) {
                //  手机号码不合法,返回失败提示
                return new JsonResult(0, "手机号码不合法,请重新输入!");
            }
    
            //    将用的短信验证码保存到Redis中
            String validateCode = SendSms.sendMessage(telephoneNumber);
    
            //  判断获取短信验证码是否出现异常
            if (validateCode.length() != 6) {
                //  说明返回的不是验证码,而是异常信息
                return new JsonResult(0, validateCode);
            }
    
            //  将短信验证码保存到 Redis 中,有效期为5分钟
            //  key  : 手机号码
            //  value: 验证码
            redisTemplate.opsForValue().set(telephoneNumber, validateCode);
            redisTemplate.expire(telephoneNumber, 300, TimeUnit.SECONDS);
    
            return new JsonResult(1, "发送成功,请查收!");
        }
    /**
    *					接下来的代码是写在这里的
    **/
    }
    

    下面的代码都是写在上面这个里面的,代码最后有注释。

    这里是在注册时填写用户名后实时验证是否可用

    这个代码是在用户在输入框中填写用户名后,异步请求后台进行查询,用户名是否可用。这个项目进行了跨域处理,在上面已经添加了@CrossOrigin注解了。

    
        /**
         *          注册账号时,在用户输入用户名之后,输入框失去焦点后立即查询数据库中是否存在此用户名
         *
         * @Author imlee
         * @param username
         * @return      返回查询结果、提示信息
         */
        @RequestMapping("/checkName.do")
        public JsonResult checkName(String username) {
    
            User user = userService.login(username);
            if (user == null) {
    
                if (username.matches("^[1-9a-zA-Z]{3,12}$")) {
    
                    return new JsonResult(1, "用户名可以使用!");
                } else {
    
                    return new JsonResult(0, "用户名不合法!");
                }
    
            }
    
            return new JsonResult(0, "用户名已存在!");
        }
    

    使用短信验证码进行用户注册

    我的理解是,在使用手机号码进行注册的时候,先使用手机号码进行“预注册”,判断手机号码是否已经注册,以及用户填写的短信验证码是否可用。

    
        /**
         *          注册账号第一步:使用手机号码进行预注册
         *
         * @Author  imlee
         *
         * @param telephoneNumber   用户填写的电话号码
         * @param telephoneCode     短信验证码
         * @return
         */
        @RequestMapping("/signUpFirst.do")
        public JsonResult signUp(String telephoneNumber, String telephoneCode) {
    
            User user = userService.signInByTelephoneNumber(telephoneNumber);
            if (user != null) {
                return new JsonResult(0, "此号码已注册,请直接登录!");
            }
    
            //  按照 手机号码 + 短信验证码 注册
            //      获取 保存在 redis 中的短信验证码
            String code = redisTemplate.opsForValue().get(telephoneNumber);
    
            //  判断短信验证码是否过期
            if (code == null || code.equals("")) {
                return new JsonResult(0, "验证码已过期,请重新获取!");
            } else {
                //  验证 用户输入的验证码和redis中保存的验证码是否一致
                if (telephoneCode.equals(code)) {
    
                    //  验证码正确,执行注册逻辑
                    int i = userService.signUpFirst(telephoneNumber);
    
                    if (i != 1) {
                        //  返回受影响行数,不为1,即注册失败
                        return new JsonResult(0, "注册失败!");
                    }
    
                } else {
                    //  验证码错误,返回提示
                    return new JsonResult(0, "验证码输入有误,请重新输入!");
                }
            }
    
            return new JsonResult(1, telephoneNumber);
        }
    

    进行注册的信息填写,这里我在代码里写的验证码是图片验证码,前面第一步的验证码才是短信验证码。因为我的注册是两步完成的,填写手机号码和短信验证码后跳转到填写注册信息的页面。也就是说第一步的时候只是在数据库中写入一个手机号码,没有其它的信息,在第二个页面中补充完整。

        /**
         *          注册账号第二步:设置用户名和密码
         *
         * @Author  imlee
         * @param username          用户填写的用户名
         * @param password          用户填写的密码
         * @param telephoneNumber   用户填写的电话号码
         * @param validate          用户填写的验证码
         * @return
         */
        @RequestMapping("/signUp.do")
        public JsonResult signUp(String username, String password, String telephoneNumber, String validate) {
    
            //  获取 redis 中保存的验证码文字
            String codeStr = redisTemplate.opsForValue().get("codeStr");
    
            //  首先验证 验证码(忽略大小写)
            if (validate.equalsIgnoreCase(codeStr)) {
    
                //  执行注册逻辑
                //  先查询用户名是否存在
                User user = userService.login(username);
    
                //  判断用户名是否存在
                if (user != null) {
                    //  用户名已存在
                    return new JsonResult(0, "此用户名已存在,请使用其它用户名!");
                } else {
                    //  用户名不存在,进行注册
                    int i = userService.signUp(username, password, telephoneNumber);
    
                    if (i != 1) {
                        //  返回受影响行数,不为1,即注册失败
                        return new JsonResult(0, "注册失败!");
                    }
                }
            } else {
    
                //  验证码错误,返回提示
                return new JsonResult(0, "验证码输入有误,请重新输入!");
            }
    
            return new JsonResult(1, "注册成功!");
        }
    

    短信验证码登录

    我将短信验证码登录和用户名、密码登录,写在了一起。

    
        /**
         *      登录方法    1.使用账号 + 密码 + 文字验证码登录
         *                 2.使用手机号码 + 短信验证码登录
         *
         * @Author  imlee
         *
         * @param username          用户名
         * @param password          密码
         * @param validate          验证码
         * @param telephoneNumber   手机号码
         * @param telephoneCode     短信验证码
         * @return                  供前台使用的 Json 数据
         */
        @RequestMapping("/signIn.do")
        public JsonResult signIn(String username, String password, String validate, String telephoneNumber, String telephoneCode) {
    
            //  验证码非空或者不是null,说明使用的是账号 + 密码 + 验证码
            //      反之,说明使用的是,手机号码 + 短信验证码
    
            User user = null;
    
            if (validate != null && !validate.equals("")) {
    
                //  获取 redis 中保存的验证码文字
                String codeStr = redisTemplate.opsForValue().get("codeStr");
    
                //  首先验证 验证码(忽略大小写)
                //      验证码正确,再验证,账号、密码
                if (validate.equalsIgnoreCase(codeStr)) {
    
                    //  执行登录逻辑
                    user = userService.login(username);
    
                    //  判断用户名是否存在
                    if (user == null) {
                        return new JsonResult(0, "此用户名不存在,请核对后重新登录!");
                    } else {
    
                        //  比对用户输入的密码和数据库中是否一致
                        if (!password.equals(user.getPassword())) {
                            return new JsonResult(0, "密码错误,请核对密码或用户名是否输入有误!");
                        }
                    }
                } else {
    
                    //  验证码错误,返回提示
                    return new JsonResult(0, "验证码输入有误,请重新输入!");
                }
            } else {
    
                //  按照 手机号码 + 短信验证码 的逻辑登录
                //      获取 保存在 redis 中的短信验证码
                String code = redisTemplate.opsForValue().get(telephoneNumber);
    
                //  判断短信验证码是否过期
                if (code == null || code.equals("")) {
                    return new JsonResult(0, "验证码已过期,请重新获取!");
                }
    
                //  验证 用户输入的验证码和redis中保存的验证码是否一致
                if (telephoneCode.equals(code)) {
    
                    //  验证码正确,执行登录逻辑
                    user = userService.signInByTelephoneNumber(telephoneNumber);
    
                    if (user == null) {
                        return new JsonResult(0, "此号码未注册账号,如需注册请移步注册页面(验证码有效期5分钟)!");
                    }
    
                } else {
                    //  验证码错误,返回提示
                    return new JsonResult(0, "验证码输入有误,请重新输入!");
                }
            }
    
            //  登录成功,返回 user 对象
            return new JsonResult(1, user);
        }
    

    短信验证码重置密码

    就不多介绍了,直接上代码了,全手工打造。这个连载到此就暂时结束了。欢迎留言交流!

    
        /**
         *          重置密码:第一步,查询手机号码是否存在
         *
         * @Author  imlee
         * @param telephoneNumber   手机号码
         * @param telephoneCode     短信验证码
         * @return
         */
        @RequestMapping("/resetPasswordFirst.do")
        public JsonResult resetPasswordFirst(String telephoneNumber, String telephoneCode) {
    
    
            User user = userService.signInByTelephoneNumber(telephoneNumber);
            if (user == null) {
                return new JsonResult(0, "此号码未注册,请核对是否输入有误!");
            }
    
            //  按照 手机号码 + 短信验证码 重置密码
            //      获取 保存在 redis 中的短信验证码
            String code = redisTemplate.opsForValue().get(telephoneNumber);
    
            //  判断短信验证码是否过期
            if (code == null || code.equals("")) {
    
                return new JsonResult(0, "验证码已过期,请重新获取!");
    
            } else {
                //  验证 用户输入的验证码和redis中保存的验证码是否一致
                if (!telephoneCode.equals(code)) {
                    return new JsonResult(0, "验证码输入有误,请重新输入!");
                }
            }
    
            return new JsonResult(1, telephoneNumber);
        }
    
        /**
         *          重置密码:第二步,修改密码
         *
         * @Author imlee
         * @param password          新密码
         * @param validate          验证码
         * @param telephoneNumber   手机号码
         * @return
         */
        @RequestMapping("/resetPassword.do")
        public JsonResult resetPassword(String password, String validate, String telephoneNumber) {
    
            //  获取 redis 中保存的验证码文字
            String codeStr = redisTemplate.opsForValue().get("codeStr");
    
            //  首先验证 验证码(忽略大小写)
            if (validate.equalsIgnoreCase(codeStr)) {
    
                //  执行重置密码逻辑
                int i = userService.resetPassword(password, telephoneNumber);
    
                if (i != 1) {
                    return new JsonResult(0, "重置失败!");
                }
    
            } else {
                //  验证码错误,返回提示
                return new JsonResult(0, "验证码输入有误,请重新输入!");
            }
    
            return new JsonResult(1, "重置成功!");
        }
    
    
    展开全文
  • 主要为大家详细介绍了JavaScript周期性获取短信验证码的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 为了保护用户信息的安全性,开始使用通过服务器向用户发送验证码的方式,接下来通过本文给大家介绍android获取短信验证码的实现方法,非常不错,感兴趣的朋友一起看看吧
  • 主要介绍了JS获取短信验证码倒计时的实现代码,需要的朋友可以参考下
  • 获取短信验证码源码

    2018-04-24 10:30:08
    在注册或者登录的时候,执行该代码可以收到手机验证码
  • 主要为大家详细介绍了Android实现获取短信验证码并自动填写功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 使用了榛子云短信平台 榛子Java SDK 开发文档 添加榛子云短信坐标 <!--榛子短信--> <dependency> <groupId>com.zhenzikj</groupId> <artifactId>...获取短信 并以

    使用了榛子云短信平台

    榛子Java SDK 开发文档

    添加榛子云短信坐标

    <!--榛子短信-->
    <dependency>
        <groupId>com.zhenzikj</groupId>
        <artifactId>zhenzisms</artifactId>
        <version>2.0.2</version>
    </dependency>
    

    Controller中使用

    获取短信 并以 uuid-code 方式存入session中并设置5分钟有效期

    /**
     * 获取短信验证码
     * 存session中,5分钟有效
     *
     * @param phoneNo
     */
    @RequestMapping(value = "/msg", method = RequestMethod.GET)
    public JsonResult<Object> getMsg(HttpServletRequest request, String phoneNo) {
    	//apiUrl, appId, appSecret 在官方“我的应用中查找”
        ZhenziSmsClient client = new ZhenziSmsClient("apiUrl", "appId", "appSecret");
        Map<String, Object> params = new HashMap<>();
        params.put("number", phoneNo);
        params.put("templateId", "706");
    
        String randomCode = RandomUtils.getRandomCode();
        String[] templateParams = new String[2];
        templateParams[0] = randomCode;
        templateParams[1] = "5分钟";
        params.put("templateParams", templateParams);
        params.put("clientIp", IpUtil.getIpAddr(request));
        logger.info("当前用户ip:" + IpUtil.getIpAddr(request));
        try {
            String result = client.send(params);
            logger.info("send message code result:" + result);
            JSONObject jsonObject = new JSONObject(result);
            if (StringUtils.equals("0", jsonObject.getString("code"))) {
                //存入session中 uuid-code  5分钟过期
                String uuidStr = UUID.randomUUID().toString();
                HttpSession session = request.getSession();
                session.setAttribute(uuidStr, randomCode);
                session.setMaxInactiveInterval(300);
                return new JsonResult<>("{\"uuid\": \"" + uuidStr + "\"}");
            } else {
                //todo 109 ip或者手机号今日接收超限 今日发送超过IP限额/每个号码每天最多接收数量
                return new JsonResult<>(Constants.CODE_MSG, result);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return new JsonResult<>(Constants.CODE_MSG, "操作失败!");
        }
    }
    

    使用到的工具类

    /**
     * 字符串工具类
     */
    public class RandomUtils {
    
        /**
         * 获取四位随机数字短信验证码
         *
         * @return
         */
        public static String getRandomCode() {
            StringBuffer codeStrBuf = new StringBuffer();
            String sources = "0123456789";
            Random rand = new Random();
            for (int j = 0; j < 4; j++) {
                codeStrBuf.append(sources.charAt(rand.nextInt(9)) + "");
            }
            return codeStrBuf.toString();
        }
    }
    
    /**
     * 返回json工具类
     *
     * @param <T>
     */
    public class JsonResult<T> {
        private T data;
        private String code;
        private String msg;
    
        /**
         * 若没有数据返回,默认状态码为 200,提示信息为“操作成功!”
         */
        public JsonResult() {
            this.code = Constants.CODE_SUCCESS;
            this.msg = "操作成功!";
        }
    
        /**
         * 若没有数据返回,可以人为指定状态码和提示信息
         *
         * @param code
         * @param msg
         */
        public JsonResult(String code, String msg) {
            this.code = code;
            this.msg = msg;
        }
    
        /**
         * 有数据返回时,状态码为 200,默认提示信息为“操作成功!”
         *
         * @param data
         */
        public JsonResult(T data) {
            this.data = data;
            this.code = Constants.CODE_SUCCESS;
            this.msg = "操作成功!";
        }
    
        /**
         * 有数据返回,状态码为 200,人为指定提示信息
         *
         * @param data
         * @param msg
         */
        public JsonResult(T data, String msg) {
            this.data = data;
            this.code = Constants.CODE_SUCCESS;
            this.msg = msg;
        }
    
        public T getData() {
            return data;
        }
    
        public void setData(T data) {
            this.data = data;
        }
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String code) {
            this.code = code;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    }
    
    

    android程序员学习javaee实现"自举",做一款属于自己的app;仅此记录,如有问题还请提出;谢谢

    展开全文
  • iOS点击获取短信验证码按钮, 由于 Demo整体测试运行效果 , 整个修改密码界面都已展现, 并附送正则表达式及修改密码逻辑.

    概述

    iOS点击获取短信验证码按钮, 由于 Demo整体测试运行效果 , 整个修改密码界面都已展现, 并附送正则表达式及修改密码逻辑.

    详细

    在APP开发中,点击获取验证码的倒计时按钮 是在注册、修改密码、绑定手机号等场景中使用!在项目中,多次使用这个按钮,则自定义一个简单的获取短信验证码倒计时功能方便使用, 大大提高开发效率。

    截图.png

    一、主要思路

    1、自定义验证码按钮:ZLVerifyCodeButton

    2、自定义文本输入框:ZLTextField

    3、正则表达式:手机号及密码校验方法

    4、修改密码界面里调用这个短信验证码, 调取后台接口,获取短信验证码处理相关其他逻辑.

    二、程序实现

    Step1. 首先自定义按钮:ZLVerifyCodeButton

    只需要调用方法即可,可以在自定义里按照自己需求去更改按钮的UI。

    @interface ZLVerifyCodeButton : UIButton
    // 由于有些时间需求不同,特意露出方法,倒计时时间次数
    - (void)timeFailBeginFrom:(NSInteger)timeCount;
    @end

    自定义按钮:

    - (void)setup {
        
        [self setTitle:@" 获取验证码 " forState:UIControlStateNormal];
        self.titleLabel.font = [UIFont systemFontOfSize:10];
        self.backgroundColor = [UIColor whiteColor];
        self.layer.cornerRadius = 3.0;
        self.clipsToBounds = YES;
        [self setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
        self.layer.borderColor = [UIColor redColor].CGColor;
        self.layer.borderWidth = 1.0;
    }

    倒计时方法:

    - (void)timeFailBeginFrom:(NSInteger)timeCount {
        
        self.count = timeCount;
        self.enabled = NO;
        
        // 加1个计时器
        self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFired) userInfo:nil repeats:YES];
    }

    计时器方法:

    - (void)timerFired {
        if (self.count != 1) {
            self.count -= 1;
            self.enabled = NO;
            [self setTitle:[NSString stringWithFormat:@"剩余%ld秒", self.count] forState:UIControlStateNormal];
    //       [self setTitle:[NSString stringWithFormat:@"剩余%ld秒", self.count] forState:UIControlStateDisabled];
        } else {
            
            self.enabled = YES;
            [self setTitle:@"获取验证码" forState:UIControlStateNormal];
    //        self.count = 60;
            
            // 停掉定时器
            [self.timer invalidate];
            self.timer = nil;
        }
    }


    Step2. 自定义文本输入框:ZLTextField

    - (void)setupUI {
        
        // 输入框
        self.borderStyle = UITextBorderStyleNone;
        [self setAutocapitalizationType:UITextAutocapitalizationTypeNone];
        self.backgroundColor = [UIColor whiteColor]; // ZLColor(0, 0, 0);
        self.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
        self.returnKeyType = UIReturnKeyNext;
        self.font = [UIFont systemFontOfSize:15];
        self.textColor = ZLColor(113, 111, 118);
        // 设置光标颜色
        self.tintColor =  ZLColor(113, 111, 118);
        // 设置UITextField的占位文字颜色
        self.placeholder = @"设置了占位文字内容以后, 才能设置占位文字的颜色";
        [self setValue: ZLColor(113, 111, 118) forKeyPath:@"_placeholderLabel.textColor"];
        // 添加背景图片
    //    self.background = [UIImage imageNamed:@"u58"];
        // 左间隔
        self.leftView = [[UIView alloc] init];
        self.leftView.width = 15;
        self.leftViewMode = UITextFieldViewModeAlways;
        // clearButton
        self.clearButtonMode = UITextFieldViewModeWhileEditing;
        
        CGFloat marginX = 15;
        // 间隔线
        UIView *line = [[UIView alloc] init];
        line.frame = CGRectMake(marginX, self.height - 0.7, UI_View_Width - marginX * 2, 1);
        line.backgroundColor = ZLColor(249, 249, 249);
        [self addSubview:line];
        
    }


    Step3. 正则表达式:手机号及密码校验方法

    - (BOOL)match:(NSString *)pattern {
        // 1.创建正则表达式
        NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
        // 2.测试字符串
        NSArray *results = [regex matchesInString:self options:0 range:NSMakeRange(0, self.length)];
        
        return results.count > 0;
    }


    Step4. 修改密码界面里调用这个短信验证码, 调取后台接口,获取短信验证码处理相关其他逻辑

    在你所需要的控制器里调用这个短信验证码按钮即可:

    4.1)初始化创建设置相关按钮属性

    // 获取验证码按钮
    @property (nonatomic, weak) ZLVerifyCodeButton *codeBtn;
        // 获取验证码按钮
        ZLVerifyCodeButton *codeBtn = [ZLVerifyCodeButton buttonWithType:UIButtonTypeCustom];
        codeBtn.frame = CGRectMake(codeField.width - codeBtnW - marginX, 10, codeBtnW, 30);
        [codeBtn addTarget:self action:@selector(codeBtnVerification) forControlEvents:UIControlEventTouchUpInside];
        [self.codeField addSubview:codeBtn];
        self.codeBtn = codeBtn;

    4.2)调取后台接口,获取短信验证码处理相关其他逻辑

    // 获取验证码点击事件
    - (void)codeBtnVerification {
    
        NSLog(@"验证码:%@", self.mobileField.text);
        
        [self.codeBtn timeFailBeginFrom:60]; // 倒计时60s
        
        // 调用短信验证码接口
        // 用户输入的验证码数字传给server,判断请求结果作不同的逻辑处理,根据自己家的产品大大需求来即可....
    //    if (请求成功且匹配成功验证码数字){
    //        [self.codeBtn timeFailBeginFrom:60];  // 倒计时60s
    //    } else {
    //        [self.codeBtn timeFailBeginFrom:1]; // 处理请求成功但是匹配不成功的情况,并不需要执行倒计时功能
    //    }
    }

    4.3)调取后台修改密码接口,处理相关逻辑

    // 调用修改密码接口
    - (void)sureBtnPress {
        
        if (![self.mobileField.text isPhoneNumber]) {
            
            [self setupAlertMessage:@"新手机号码输入不正确"];
        } else if (![self.codeField.text isEqualToString:self.codeStr]) {
    
            [self setupAlertMessage:@"验证码输入不正确"];
        } else if(![self.newpswField.text isPSW]) {
    
            [self setupAlertMessage:@"新密码不符合要求"];
        } else if ([self.mobileField.text isPhoneNumber] && [self.codeField.text isEqualToString:self.codeStr] && [self.newpswField.text isPSW]) {
            
            // 调用修改密码接口
            [self changePswForServer];
        }
        
    }
    
    // 弹框提示错误信息
    - (void)setupAlertMessage:(NSString *)message {
        
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:message preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            
        }];
        [alert addAction:okAction];
        [self presentViewController:alert animated:YES completion:nil];
    }

    三、压缩文件截图及运行效果

    1、压缩文件截图

    A8E5039C-7F7A-4C80-A427-C08AC97E3D8F.png

    2、项目文件截图

    DFE113F6-6F16-419A-8642-D14E75CE24D1.png

    3、运行时的效果图

    运行效果.gif

    四、其他补充

    界面性问题可以根据自己项目需求调整即可, 具体可参考代码, 项目能够直接运行!

    由于 Demo整体测试运行效果 , 整个修改密码界面都已展现, 并附送正则表达式及修改密码逻辑.

    注:本文著作权归作者,由demo大师(http://www.demodashi.com)宣传,拒绝转载,转载需要作者授权


    展开全文
  • android获取短信验证码实例,获取登陆密码,验证码,注册码,开发实例,只需改动几个参数就可以使用
  • android 获取短信验证码倒计时

    千次阅读 2015-06-29 13:29:55
    android 获取短信验证码倒计时
  • * 短信监听器,用于自动填充验证码 */ public class SMSContentObserver extends ContentObserver { public final String SMS_URI_INBOX = content://sms/inbox;//收信箱 private Activity activity = null; ...
  • Android自动获取短信验证码

    万次阅读 2016-06-18 16:24:39
    自动获取验证码

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,960
精华内容 7,984
关键字:

怎样获取短信验证码