java实现手机验证码功能

简介: 手机短信验证现在在各种系统可以说都是用的非常普遍的,这个可能是方便和安全性的考虑,所以才广泛的使用简单实用一下短信接口。

Demo下载


实用短信接口公司的接口


以“秒滴”营销短信群发平台_智能5G短信_短信语音验证码_106短信接口-秒嘀科技接口公司为例


1注册账号

2获取一下两个信息


1.jpg


3创建短信模板


2.png


3.png


创建为审核通过后模板为:


【柴火科技】您的验证码为{1},请于2分钟内正确输入,如非本人操作,请忽略此短信。


等价于:


【柴火科技】您的验证码为" + randNum + ",请于2分钟内正确输入,如非本人操作,请忽略此短信。


创建项目Maven(非web项目)项目


pom.xml


<dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>1.10</version>
    </dependency>


工具类


package com.imooc.util;
import java.util.Random;
public class RandNum {
   /**
     * @生成一个6位的随机码  
     */
    public static String createRandNum() {
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for(int i = 0; i <= 5; i++) {
            String s = random.nextInt(10) + "";
            sb.append(s);
        }
        return sb.toString();
    }
}


工具类


注意:


(1)public static final String AUTH_TOKEN = 图一上面的信息;


(2)public static final String ACCOUNT_SID = 图一上面的信息;


(3)sendMegTo方法中的变量  要和 图二图三匹配,否则会报错,就是拼接字符串


String smsContent = "【柴火科技】您的验证码为" + randNum + ",请于2分钟内正确输入,如非本人操作,请忽略此短信。";


(4)剩下的不需要改动


package com.imooc.util;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import org.apache.commons.codec.digest.DigestUtils;
public class SendTelMsgUtils {
  //http://www.miaodiyun.com/
  /**
   * ACCOUNT_SID:开发者主账号ID(注册后自动生成)
   */
  public static final String ACCOUNT_SID = "填写ACCOUNT SID";
  /**
   * AUTH_TOKEN:开发者账号认证密匙(注册后自动生成)
   */
  public static final String AUTH_TOKEN = "填写AUTH TOKEN";
  /**
   * BASE_URL:请求地址
   */
  public static final String BASE_URL = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";
  /**
   * RESP_DATA_TYPE:数据返回格式为JSON格式
   */
  public static final String RESP_DATA_TYPE = "json";
  /**
   * 
   * @Title:sendMsgTo
   * @Description:发送短信验证码 @param:
   * @return:String
   */
  public static String sendMsgTo(String to, String createRandNum) {
    /**
     * randNum:生成的验证码随机数
     */
    String randNum = createRandNum;
    /**
     * smsContent:短信内容(短信签名+短信内容,注意要和配置的模板一致,否则报错)
     */
    String smsContent = "【柴火科技】您的验证码为" + randNum + ",请于2分钟内正确输入,如非本人操作,请忽略此短信。";
    /**
     * 获取时间戳
     */
    String timestamp = getTimestamp();
    /**
     * 获取签名
     */
    String sig = sig_MD5(ACCOUNT_SID + AUTH_TOKEN + timestamp);
    /**
     * 要提交的post数据
     */
    String http_post = "accountSid=" + ACCOUNT_SID + "&smsContent=" + smsContent + "&to=" + to + "&timestamp="
        + timestamp + "&sig=" + sig + "&respDataType=" + RESP_DATA_TYPE;
    OutputStreamWriter osw = null;
    BufferedReader br = null;
    StringBuffer sb = new StringBuffer();
    try {
      /**
       * 获取连接
       */
      URL url = new URL(BASE_URL);
      /**
       * 打开连接
       */
      URLConnection conn = url.openConnection();
      /**
       * 设置连接参数
       */
      conn.setDoOutput(true);
      conn.setDoInput(true);
      conn.setConnectTimeout(5000);
      conn.setReadTimeout(20000);
      /**
       * 提交数据
       */
      osw = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
      osw.write(http_post);
      osw.flush();
      /**
       * 读取返回数据
       */
      br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
      String line = "";
      while ((line = br.readLine()) != null) {
        sb.append(line);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return sb.toString();
  }
  /**
   * 获取时间戳
   */
  public static String getTimestamp() {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    String date = sdf.format(new Date());
    return date;
  }
  /**
   * 对"ACCOUNT_SID + AUTH_TOKEN + timestamp"进行MD5加密
   * 
   *                            <dependency>
   *                            <groupId>commons-codec</groupId>
   *                            <artifactId>commons-codec</artifactId>
   *                            <version>1.10</version> </dependency>
   *                            </dependencies>
   */
  public static String sig_MD5(String str) {
    String sig_md5 = DigestUtils.md5Hex(str);
    return sig_md5;
  }
}


测试方法


package com.imooc.test;
import com.imooc.util.RandNum;
import com.imooc.util.SendTelMsgUtils;
public class Main {
  public static void main(String[] args) {
    // controller中随机创建一个randNum
    String randNum = RandNum.createRandNum();
    System.out.println("验证码是:" + randNum);
    // randNum发送给手机号
    String result = SendTelMsgUtils.sendMsgTo("17863961702", randNum);
    System.out.println(result);
  }
}
目录
相关文章
|
6月前
|
安全 Java API
Java中的Lambda表达式:简洁与功能的结合
Java中的Lambda表达式:简洁与功能的结合
499 211
|
6月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
748 64
|
5月前
|
存储 数据可视化 Java
Java Stream API 的强大功能
Java Stream API 是 Java 8 引入的重要特性,它改变了集合数据的处理方式。通过声明式语法,开发者可以更简洁地进行过滤、映射、聚合等操作。Stream API 支持惰性求值和并行处理,提升了代码效率和可读性,是现代 Java 开发不可或缺的工具。
122 0
Java Stream API 的强大功能
|
6月前
|
前端开发 JavaScript Java
Java 项目实战城市公园信息管理系统开发流程与实用功能实现指南
本系统基于Java开发,采用Spring Boot后端框架与Vue.js前端框架,结合MySQL数据库,构建了一个高效的城市公园信息管理系统。系统包含管理员、用户和保洁人员三大模块,涵盖用户管理、园区信息查询、订票预约、服务管理等功能,提升公园管理效率与服务质量。
210 6
|
6月前
|
安全 Java 数据库
Java 项目实战病人挂号系统网站设计开发步骤及核心功能实现指南
本文介绍了基于Java的病人挂号系统网站的技术方案与应用实例,涵盖SSM与Spring Boot框架选型、数据库设计、功能模块划分及安全机制实现。系统支持患者在线注册、登录、挂号与预约,管理员可进行医院信息与排班管理。通过实际案例展示系统开发流程与核心代码实现,为Java Web医疗项目开发提供参考。
343 2
|
6月前
|
机器学习/深度学习 算法 Java
Java 大视界 -- Java 大数据机器学习模型在生物信息学基因功能预测中的优化与应用(223)
本文探讨了Java大数据与机器学习模型在生物信息学中基因功能预测的优化与应用。通过高效的数据处理能力和智能算法,提升基因功能预测的准确性与效率,助力医学与农业发展。
|
7月前
|
Java API
深入解析Java API中Object类的功能
了解和合理运用 Object类的这些方法,对于编写可靠和高效的Java应用程序至关重要。它们构成了Java对象行为的基础,影响着对象的创建、识别、表达和并发控制。
145 0
|
存储 NoSQL 数据库
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
这篇文章讲述了在分布式微服务系统中添加用户注册和登录功能的过程,重点介绍了用户注册时通过远程服务调用第三方服务获取短信验证码、使用Redis进行验证码校验、对密码进行MD5加密后存储到数据库,以及用户登录时的远程服务调用和密码匹配校验的实现细节。
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
2798 5
|
资源调度 JavaScript API
nest.js + sms 实现短信验证码登录
本文介绍了在Nest.js框架中集成短信验证码登录的实现方案,详细阐述了使用阿里云短信服务的配置流程、资质申请、短信模板设置,并提供了API调用示例和工程代码的运行步骤。
nest.js + sms 实现短信验证码登录