如何发送验证码

1.为什么需要验证码

        手机验证码是一种用于验证用户身份的短信或语音信息。当你在注册账号、登录、进行支付等操作时,系统会向你的手机发送一个包含数字和字母的验证码。你需要将该验证码输入到相应的页面或应用程序中,以完成身份验证。手机验证码的目的是确保只有拥有手机的用户才能进行特定操作,增加账户安全性。

2.有什么可以帮助我们发送验证码

    2.1 使用什么发送验证码   

  1. 阿里云短信服务:阿里云提供了短信服务,开发者可以使用其API接口来发送手机验证码。

  2. 腾讯云短信服务:腾讯云也提供了短信服务,开发者可以使用其API接口来发送手机验证码。

  3. 云片网短信服务:云片网是一家专注于短信服务的第三方平台,开发者可以通过其提供的API接口来发送手机验证码。

  4. Twilio短信服务:Twilio是一家国际知名的通信服务提供商,其也提供了短信服务,可以用于发送手机验证码等短信内容。

    2.2 发送验证码的种类有哪些   

  1. 纯数字验证码:由一串纯数字组成的验证码,通常包含4-6位数字。

  2. 数字字母混合验证码:由数字和字母组成的验证码,通常包含4-6位字符,可以是大小写字母和数字的组合。

  3. 动态验证码:每次生成的验证码都不同,可以是纯数字、数字字母混合或其他形式的验证码。动态验证码的特点是具有时效性,一般在一定时间内有效,过期后需要重新获取。

  4. 图形验证码:将验证码以图片形式展示,并通过短信发送给用户。用户需要根据图片中的内容输入相应的信息进行验证。

  5. 随机密码验证码:除了传统的验证码形式外,还有一种是通过随机生成一段密码,并将该密码通过短信发送给用户,在验证时要求用户输入该密码。

​​​​​

3.如何使用java发送验证码

        3.1使用什么发送验证码

        在这里其实阿里云他,腾讯云等等。发送验证码都是一样的方式,学会后可以去去其他的平台试一试。

        3.2如何发送验证码

        1.首先进入网页

阿里云-计算,为了无法计算的价值 (aliyun.com)https://www.aliyun.com/?utm_content=se_1012431275

        2.登陆

        3.扫码进入

           4.进入主页后,搜索短信服务,找到我们发送验证码界面

短信服务 (aliyun.com)https://dysms.console.aliyun.com/overview

        5.点击注册模板

                 注册我们需要的模板信息

 

        6.添加测试手机号码

         7.导入maven依赖
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.6.3</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
    <version>1.0.0</version>
</dependency>
        8.导入util类
package servlet;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;

public class SendSMSUtil {
    // 你的accessKeyId
    private static final String accessKeyId = "LTAI5tLqq1kwy5DpHnHRGFdX";
    // 你的accessKeySecret
    private static final String accessKeySecret = "nRT4yfsJj0hszFiqFozAZOUIihgOiM";
    // 上面设置的签名
    private static final String signName = "智慧考试管理系统";//
    // 短信模板,模板code
    private static final String templateCode = "SMS_461450614";
    private static int code;
    // phoneNumber必须当做参数传入
    public String senSMSUtil(String phoneNumber) {
        // 设置超时时间-可自行调整
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");

        // 初始化ascClient需要的几个参数
        final String product = "Dysmsapi";// 短信API产品名称(短信产品名固定,无需修改)
        final String domain = "dysmsapi.aliyuncs.com";// 短信API产品域名(接口地址固定,无需修改)


        // 初始化ascClient,暂时不支持多region(请勿修改)
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
        try {
            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        IAcsClient acsClient = new DefaultAcsClient(profile);

        // 组装请求对象
        SendSmsRequest request = new SendSmsRequest();

        // 使用post提交
        request.setMethod(MethodType.POST);

        // 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,
        // 验证码类型的短信推荐使用单条调用的方式;发送国际/港澳台消息时,接收号码格式为国际区号+号码,如“85200000000”
        request.setPhoneNumbers(phoneNumber);

        request.setSignName(signName);

        // 必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版
        request.setTemplateCode(templateCode);

        //随机生成六位验证码
        code = (int) ((Math.random() * 9 + 1) * 100000);

        // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
        // 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
        request.setTemplateParam("{code:" + code + "}");

        // 请求失败这里会抛ClientException异常
        SendSmsResponse sendSmsResponse = null;

        try {
            sendSmsResponse = acsClient.getAcsResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
            return "请求失败";
        }

        assert sendSmsResponse.getCode() != null;
        // 获取错误码,如果你账户没钱会返回isv.AMOUNT_NOT_ENOUGH,表示账户没钱,充点钱就行了
        System.out.println(sendSmsResponse.getCode());
        if (sendSmsResponse.getCode() == null || !sendSmsResponse.getCode().equals("OK")) {// 发送不成功
            return sendSmsResponse.getMessage();
        }

        // 请求成功
        return "OK";

    }

    public int getCode() {
        return code;
    }


}


        9.修改成我们的验证码信息

        10.测试类调用实现发送验证码
            PrintWriter out = null;
            try {
                out = resp.getWriter();
            } catch (IOException e) {
                e.printStackTrace();
            }
            String phoneNumber = req.getParameter("phone");
            System.out.println(phoneNumber);

            // 发送短信
            SendSMSUtil sendSMS = new SendSMSUtil();
            String result = sendSMS.senSMSUtil(phoneNumber);

            if (result == null || !result.equals("OK")) {// 发送不成功
                System.out.println("失败");
            }

            // 获取验证码
            int code = sendSMS.getCode();
            // 将数据存入SESSION
            // 将验证码生成时间存入SESSION,若超过五分钟则不通过校验
            // 将验证码生成时间存入SESSION,若超过五分钟则不通过校验

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值