MsgCodeUtil.java


package com.hg.util; import com.soyea.enums.ResultEnum;
import com.soyea.exception.BizException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.misc.BASE64Encoder; import javax.servlet.http.HttpSession;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.rmi.RemoteException;
import java.util.regex.Matcher;
import java.util.regex.Pattern; /**
* 短信验证码工具
*/
public class MsgCodeUtil { /*
resultEnum中的参数
ERROR_MOBILE(1001002,"请填写正确的手机号码"),
MESSAGE_TIME_ERROR(1001003,"60秒内只能发送一次短信,请稍后再试"),
MESSAGE_SEND_ERROR(1001004,"发送短信出错,请稍后再试"),
MOBILE_NOT_SEND_CODE(1001005,"该手机号未获取验证码,请先获取验证码"),
MOBILE_CAN_NOT_CHANGE(1001006,"此手机号与获取验证码的手机号不一致"),
MESSAGE_CODE_INVALID(1001007,"此验证码失效,请重新获取验证码"),
MESSAGE_CODE_ERROR(1001008,"验证码错误"), */ private static Logger log = LoggerFactory.getLogger(MsgCodeUtil.class); private static final String MSG_START_TIME = "msg_start_time"; //短信发送时间
private static final String MOBILE_MSG_MOBILE = "mobile_msg_mobile"; //手机号
private static final String MOBILE_MSG_CODE = "mobile_msg_code"; //验证码
private static final Integer CODE_VALID_TIME = 5; //验证码有效时间,单位:分钟 /**
* 发送验证码
* @param msgCode 验证码
* @param phone 电话号码
* @param session
*/
public static void sendCode(String msgCode, String phone, HttpSession session) {
//获取当前时间
long startTime = System.currentTimeMillis();
long startTimefromSessioin = (long) (httpSession.getAttribute(MSG_START_TIME) == null ? 0L : httpSession.getAttribute(MSG_START_TIME));
//验证码获取一次最少60秒 为了防止网络延迟 设置成55
if (((startTime - startTimefromSessioin) / 1000) <= (long) 55) {
//发送验证码太频繁
throw new BizException(ResultEnum.MESSAGE_TIME_ERROR.getMsg());
}
//发送短信
//todo 封装短信内容
String message = "验证码:" + msgCode + ","+CODE_VALID_TIME+"分钟内有效";
//todo 调用第三方接口发送短信
// Boolean sendSuccess = axisSendMsg(message, phone);
Boolean sendSuccess = true;
if (sendSuccess) {
//短信发送成功,设置属性到session
saveCode(session,phone,msgCode);
} else {
//短信发送失败,请稍后再试
throw new BizException(ResultEnum.MESSAGE_SEND_ERROR.getMsg());
} } //校验验证码
public static boolean validateCode(String mobile, String code, HttpSession session) {
//判断该手机号是否发送过验证码
String mobileFromSession = (String) session.getAttribute(MOBILE_MSG_MOBILE);
if (StringUtils.isBlank(mobileFromSession)) {
//未发送过验证码
throw new BizException(ResultEnum.MESSAGE_CODE_NO_SEND.getMsg());
} //判断手机号是否是发送验证码的手机号
if (!mobile.equals(mobileFromSession))
throw new BizException(ResultEnum.MOBILE_CAN_NOT_CHANGE.getMsg()); //获取短信发送时间
long startTimeFromSession = (long) session.getAttribute(MSG_START_TIME);
//判断当前验证码是否失效
if (((System.currentTimeMillis() - startTimeFromSession) / 1000) > ((long) CODE_VALID_TIME * 60)) {
throw new BizException(ResultEnum.MESSAGE_CODE_ERROR.getMsg());
} //判断验证码是否输入正确
if (!code.equals((String) session.getAttribute(MOBILE_MSG_CODE))) {
throw new BizException(ResultEnum.MESSAGE_CODE_IS_ERROR.getMsg());
} //校验通过
return true;
} /**
* 短信发送成功后,保存验证码
*/
public static void saveCode(HttpSession session,String phone,String msgCode) {
session.setAttribute(MSG_START_TIME, System.currentTimeMillis());
session.setAttribute(MOBILE_MSG_MOBILE, phone);
session.setAttribute(MOBILE_MSG_CODE, msgCode);
} /**
* 使用验证码后,销毁验证码
*/
public static void consumeCode(HttpSession session) {
session.removeAttribute(MOBILE_MSG_MOBILE);
session.removeAttribute(MSG_START_TIME);
session.removeAttribute(MOBILE_MSG_CODE);
} /**
* 生成4位数字验证码
*/
public static String createRandomVcode() {
String vcode = "";
for (int i = 0; i < 4; i++) {
vcode = vcode + (int) (Math.random() * 9);
}
return vcode;
} /**
* 校验手机号是否合法
*/
public static Boolean isMobile(String number) {
boolean flag = false;
try {
Pattern p = Pattern.compile("^(13[0-9]|15[012356789]|17[0-9]|18[0-9]|14[57])[0-9]{8}$");
Matcher m = p.matcher(number);
flag = m.matches();
} catch (Exception e) {
flag = false;
}
return flag;
} }

JAVA短信验证码 工具类的更多相关文章

  1. php实现的IMEI限制的短信验证码发送类

    php实现的IMEI限制的短信验证码发送类 <?php class Api_Sms{ const EXPIRE_SEC = 1800; // 过期时间间隔 const RESEND_SEC = ...

  2. java 短信验证码===随机数

    生成验证码,验证码生成 String mobile = phone;// 手机号码,多个号码使用","分割 // 生成随机6位码 String s = ""; ...

  3. java 使用网建SMS发送短信验证码

    首先, 注册并登录网建用户, 新注册用户将获得5条的测试短信 网建短信通地址: http://sms.webchinese.cn/default.shtml 注册账号在此就不多做赘述了, 直接上代码 ...

  4. 云平台短信验证码通知短信java/php/.net开发实现

    一.本文目的 大部分平台都有一个接入发送短信验证码.通知短信的需求.虽然市场上大部分平台的接口都只是一个非常普通的HTTP-GET请求,但终归有需要学习和借鉴使用的朋友. 本文的初衷是主要提供学习便利 ...

  5. 移动端获取短信验证码java实现——阿里云短信服务

    需求:移动端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短信 ...

  6. 浏览器端获取短信验证码java实现——阿里云短信服务

    需求:浏览器端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短 ...

  7. java接入创蓝253短信验证码

    说明 项目是springboot框架 1.短信配置文件 包含验证码发送路径.用户名.密码 chuanglan.requesturl= chuanglan.account= chuanglan.pswd ...

  8. java后台通过Servlet给用户发送手机短信验证码,第一次写勿喷,欢迎转载

    短信验证码跟自己在Servlet画的验证码不一样,我们不用管短信验证码是怎么产生的,我们只需要关注如何调用短信验证码,在短信验证码里面添加 自己需要的随机数或者其他的内容. 现在直接上流程 第一步找一 ...

  9. Java 实现手机发送短信验证码

    Java 实现手机发送短信验证码 采用引入第三方工具的方式,网上查了半天,发现简单的实现方式便是注册一个中国网建的账号,新建账号的时候会附带赠几条免费短信,彩信 ,之后想要在使用就得花钱了.简单的操作 ...

随机推荐

  1. LUOGU P1291 [SHOI2002]百事世界杯之旅 (期望dp)

    传送门 解题思路 期望$dp$.因为这个是期望步数,所以要倒着推.那么这道题就变得一脸可做了,设$f[i]$表示还有$i$张牌没有收集的期望,那么考虑再抽一张,有$(n-i)/n$的概率抽到抽过的牌, ...

  2. 深入浅出 Java Concurrency (25): 并发容器 part 10 双向并发阻塞队列 BlockingDeque[转]

    这个小节介绍Queue的最后一个工具,也是最强大的一个工具.从名称上就可以看到此工具的特点:双向并发阻塞队列.所谓双向是指可以从队列的头和尾同时操作,并发只是线程安全的实现,阻塞允许在入队出队不满足条 ...

  3. spark生态圈简介

    原文引自:http://www.cnblogs.com/shishanyuan/p/4700615.html 1.简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algori ...

  4. 架构发展史Spring Cloud

    转自:https://www.iteye.com/news/32734 Spring Cloud作为一套微服务治理的框架,几乎考虑到了微服务治理的方方面面,之前也写过一些关于Spring Cloud文 ...

  5. NoSQL 文档数据库

  6. 使用springmvc实现文件上传

    该配置在javaweb上传文件篇中的基础上进行配置:https://www.cnblogs.com/flypig666/p/11745182.html 1.配置文件解析器,在springmvc.xml ...

  7. 编译安装Python3.6.1

    系统:CentOS 7 Python: 3.6.1 去官方网站下载Python的源码包 然后准备开发环境和服务器平台开发 注意:python编译还依赖一个zlib-devel(本人第一次编译就因为不知 ...

  8. 阿里云提供全托管 ZooKeeper

    自 2010 年左右第一次引入以来,Apache ZooKeeper 目前在阿里巴巴集团内部已经有了将近 10 年的发展,使用的场景非常广泛,基于 ZooKeeper 强一致性的特点,被用在了分布式锁 ...

  9. 双系统可以进入Windows但进入Ubuntu时无法进入系统引导,只有左上角光标闪

    双系统可以进入Windows但进入Ubuntu时无法进入系统引导,只有左上角光标闪 这时候可以进入windows下的easyBCD重新创建ubuntu引导项即可

  10. 循环/闭包/setTimeout/Promise 综合

    控制台显示内容为? for (var i = 0; i < 5; i++) { console.log(i); } 控制台显示内容为? for (var i = 0; i < 5; i++ ...