天天看點

java實作手機驗證碼功能

手機短信驗證現在在各種系統可以說都是用的非常普遍的,這個可能是友善和安全性的考慮,是以才廣泛的使用簡單實用一下短信接口。

Demo下載下傳

連結: ​​百度網盤 請輸入提取碼​​

提取碼: i1r8

實用短信接口公司的接口

以“秒滴”​​營銷短信群發平台_智能5G短信_短信語音驗證碼_106短信接口-秒嘀科技​​接口公司為例

1新增賬號

2擷取一下兩個資訊

java實作手機驗證碼功能

3建立短信模闆

java實作手機驗證碼功能
java實作手機驗證碼功能

建立為稽核通過後模闆為:

【柴火科技】您的驗證碼為{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 = 圖一上面的資訊;

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 + "×tamp="
        + 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);
  }

}