java手机验证码代码_手机验证码(Java代码)

首先就是导入相关的jar包,这里用maven依赖:

com.alibaba

fastjson

1.2.54

创建发送验证码的类:

package com.snm.util;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.URL;

import java.net.URLConnection;

import net.sf.json.JSONObject;

/**

* 获取短信验证码类

* @author LB_lfx

*

*

*/

public class GetMessage {

/**

* 用户ID

*/

public static final String ACCOUNT_SID = "";//在平台里将sid复制到这里即可

/**

* 密钥

*/

public static final String AUTH_TOKEN = "";//在平台里获取token复制到这里即可

/**

* 请求地址前半部分

*/

public static final String BASE_URL = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";//请求地址是固定的不用改

public static String randNum = RandUtil.getRandNum();//随机数

public static String smsContent = null;//信息内容

/**

* (获取短信验证码)

* @param to

* @return String

*/

public static String getResult(String to) {

String randNum = RandUtil.getRandNum();

smsContent = "【CRM人力资源管理】您的验证码为{" +randNum+ "},请于2分钟内正确输入,如非本人操作,请忽略此短信。";//消息模板,与平台的模板保持一致

System.out.println(randNum);

System.out.println(smsContent);

String args = QueryUtil.queryArguments(ACCOUNT_SID, AUTH_TOKEN, smsContent, to);

OutputStreamWriter out = null;

BufferedReader br = null;//读取缓存

StringBuffer sb = new StringBuffer();

try {

URL url = new URL(BASE_URL);//创建链接

URLConnection connection = url.openConnection(); //打开链接

connection.setDoOutput(true);//打开URLConnection的OutputStream输出流

connection.setDoInput(true);

connection.setConnectTimeout(5000); //设置链接超时

connection.setReadTimeout(10000); //设置读取超时

//提交数据

out = new OutputStreamWriter(connection.getOutputStream(),"utf-8");

out.write(args);//输出

out.flush();//清空输出流

//读取返回数据

br = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));

String line = "";

while((line = br.readLine())!=null){

sb.append(line);//循环添加读取出来的数据

}

} catch (Exception e) {

e.printStackTrace();

}finally {

try {

if (br!=null) {

br.close();//关闭缓存

}

if (out!=null) {

out.close();//关闭输出流

}

} catch (Exception e2) {

e2.printStackTrace();

}

}

//转json格式

JSONObject jsonObject = JSONObject.fromObject(sb.toString());

//获取状态码

Object object = jsonObject.get("respCode");

System.out.println("状态码:"+object+"验证码:"+randNum);

if (!object.equals("00000")) {

return object.toString();//如果发送失败返回状态码

}else{

return randNum;

}

}

}

这里用到的平台是秒滴,以上需要改的是ACCOUNT_SID和AUTH_TOKEN

然后创建随机生成随机数的类:

package com.snm.util;

import java.util.Random;

public class RandUtil {

public static String getRandNum() {

String randNum = new Random().nextInt(1000000)+"";

System.out.println("生成"+randNum);

if (randNum.length()!=6) { //如果生成的不是6位数随机数则返回该方法继续生成

return getRandNum();

}

return randNum;

}

}

然后一步就是给验证码加密配置类:

package com.snm.util;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.text.SimpleDateFormat;

import java.util.Date;

/**

* 类描述:发送验证码工具类

*/

public class QueryUtil {

public static String queryArguments(String ACCOUNT_SID,String AUTH_TOKEN, String smsContent,String to) {

String timestamp = getTimestamp(); //时间戳

String sig = MD5(ACCOUNT_SID,AUTH_TOKEN,timestamp);//签名认证

String str = "accountSid="+ACCOUNT_SID+"&smsContent="+

smsContent+"&to="+to+"&timestamp="+timestamp+"&sig="+sig;

return str;

}

/**

* MD5加密

* @param args

* @return

*/

public static String MD5(String... args){ //动态参数

//加密用户id

StringBuffer result = new StringBuffer();

if (args == null || args.length == 0) {

return "";

} else {

StringBuffer str = new StringBuffer();

for (String string : args) {

str.append(string);

}

System.out.println("加密前:\t"+str.toString());

try {

//加密用户id转成16进制数

MessageDigest digest = MessageDigest.getInstance("MD5");

byte[] bytes = digest.digest(str.toString().getBytes());

for (byte b : bytes) {

String hex = Integer.toHexString(b&0xff); //转化十六进制

if (hex.length() == 1) {

result.append("0"+hex);

}else{

result.append(hex);

}

}

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

}

}

System.out.println("加密后:\t"+result.toString());

return result.toString();

}

/*

* 获取时间戳

*/

public static String getTimestamp(){

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");

Date date = new Date();

return sdf.format(date);

}

}

最后一步就是测试了,在main方法中测试:

package com.snm.test;

import com.snm.util.GetMessage;

public class Test {

public static void main(String[] args) {

String phone = "15893868533";

String rod = GetMessage.getResult(phone);

System.out.println(rod+":验证码");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值