0
点赞
收藏
分享

微信扫一扫

java实现手机验证码功能


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

Demo下载

链接: ​​百度网盘 请输入提取码​​

提取码: i1r8

实用短信接口公司的接口

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

1注册账号

2获取一下两个信息

java实现手机验证码功能_验证码

3创建短信模板

java实现手机验证码功能_验证码_02

java实现手机验证码功能_验证码_03

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

【柴火科技】您的验证码为{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 + "×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);
}

}

举报

相关推荐

0 条评论