详解手机注册验证码操作思路与流程
来源:互联网 发布:赛车游戏网络同步 编辑:程序博客网 时间:2024/05/22 06:38
手机注册验证码操作思路与流程
2、随机生成验证码
3、将生成的验证码通过第三方接口已短信形式发送给手机
4、保存验证码到数据库
1、前端传入手机号参数并做验证码倒计时
/** * 重新获取验证码倒计时 * @returns */reGetSMS : function () {var obj = $('#btn_getCode');// 重新发送倒计时var validCode = true;var time=60;if (validCode) {validCode = false;var t = setInterval(function () {time --;$(obj).html('重新获取('+time+'s)');if (time==0) {clearInterval(t);$(obj).html("重新获取");validCode = true;sms_flag = true;}},1000);}}
2、随机生成验证码
public static String getSMSCode() {return String.valueOf((int)(Math.random() * 9000) + 1000);}
3、将生成的验证码通过第三方接口已短信形式发送给手机
/** *参数是手机号码和由验证码组成的字符串 */private static boolean send(String phone, String content) throws Exception {// 创建StringBuffer对象用来操作字符串StringBuffer sb = new StringBuffer("http://http.yunsms.cn/tx/?");// 向StringBuffer追加用户名sb.append("uid=56262");// 向StringBuffer追加密码(密码采用MD5 32位 小写)sb.append("&pwd=3019654cd7d57f8a8464e2b63f8c923c");// 向StringBuffer追加手机号码sb.append("&mobile=" + phone);// 向StringBuffer追加消息内容转URL标准码sb.append("&content=" + URLEncoder.encode(content,"gbk"));BufferedReader in = null;URL url = null;HttpURLConnection connection = null;int result = 0;try {url = new URL(sb.toString());connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("POST");in = new BufferedReader(new InputStreamReader(url.openStream()));result = Integer.parseInt(in.readLine());} catch (Exception e) {throw new Exception("发送短信失败",e);} finally {if (in != null) {in.close();}if (connection != null) {connection.disconnect();}}return result == SUCCESS_SMS;}
4、保存验证码到数据库
要点:
a、需要存的参数手机号、验证码、开始时间、结束时间
public class SMSDto {/** 手机号码 */private String phone;/** 短信验证码 */private String sms_code;/** 开始时间(当前秒数) */private String begin_time;/** 到期时间(当前秒数 + 有效期) */private String end_time;/** * 默认构造方法 */public SMSDto() {super();}/** * 生成验证码 * @param phone手机 * @param sms_code验证码 */public SMSDto(String phone, String sms_code) {super();this.phone = phone;this.sms_code = sms_code;int cur = (int) (System.currentTimeMillis() / 1000);this.begin_time = String.valueOf(cur);this.end_time = String.valueOf(cur + GlobalContract.TIME_SMS);}}b、先验证手机号码是否存在,存在则修改
5、验证码验证
// 1.验证【验证码】
SMSDto smsDto = smsUserDao.getSMSCode(phone);
a、验证验证码是否正确
sms_code.equals(smsDto.getSms_code())
b、验证验证码是否过期
if (((long) (System.currentTimeMillis() / 1000)) < Long.parseLong(smsDto.getEnd_time())) {
//未过期
}else{
//已过期
}
实现层关键代码:
//准备验证码private ResultVO sendSmsCode(String phone) throws Exception{log.info(GlobalContract.LOG_BEGIN);ResultVO resultVO = null;// 1.生成验证码String random = SMSUtil.getSMSCode();// 2.发送验证码if(SMSUtil.sendSMS(phone, random)){// 3.保存验证码SMSDto sms = new SMSDto(phone, random);SMSDto smsDto = smsUserDao.getSMSCode(phone);if (smsDto == null) {// 新增验证码smsUserDao.addUserSMS(sms);} else {// 修改验证码smsUserDao.updateUserSMS(sms);}resultVO = new ResultVO();} else {resultVO = new ResultVO(GlobalMessage.MSG_07);}log.info(GlobalContract.LOG_END);return resultVO;}SMSUtil类关键代码:
public class SMSUtil {/** 短信模板 */private static final String CONTENT_0 = "(验证码)感谢您的支持,祝您生活愉快!【xxx】";/** SMS发送成功 */public static final int SUCCESS_SMS = 100;//public static void main(String[] args) throws Exception {//System.out.println(sendSMS("18018025014", "123456"));//}/** * 发送验证码 * @param phone手机 * @param random验证码 * @return */public static boolean sendSMS(String phone, String random) throws Exception {return send(phone, random.concat(CONTENT_0));}/** * 生成验证码 * @return */public static String getSMSCode() {return String.valueOf((int)(Math.random() * 9000) + 1000);}/** * 发送短信 * @param phone手机号码 * @param content发送内容 * @return */private static boolean send(String phone, String content) throws Exception {// 创建StringBuffer对象用来操作字符串StringBuffer sb = new StringBuffer("http://http.yunsms.cn/tx/?");// 向StringBuffer追加用户名sb.append("uid=56262");// 向StringBuffer追加密码(密码采用MD5 32位 小写)sb.append("&pwd=3019654cd7d57f8a8464e2b63f8c923c");// 向StringBuffer追加手机号码sb.append("&mobile=" + phone);// 向StringBuffer追加消息内容转URL标准码sb.append("&content=" + URLEncoder.encode(content,"gbk"));BufferedReader in = null;URL url = null;HttpURLConnection connection = null;int result = 0;try {url = new URL(sb.toString());connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("POST");in = new BufferedReader(new InputStreamReader(url.openStream()));result = Integer.parseInt(in.readLine());} catch (Exception e) {throw new Exception("发送短信失败",e);} finally {if (in != null) {in.close();}if (connection != null) {connection.disconnect();}}return result == SUCCESS_SMS;}}
阅读全文
0 0
- 详解手机注册验证码操作思路与流程
- 手机验证码思路
- 手机验证码登录与注册
- 注册验证码校验思路
- JSP 注册手机验证码
- 手机注册获取验证码
- java给手机发送验证码思路
- 网站、手机验证码开发(手机注册验证)
- Java注册手机获取验证码
- 阿里大于手机注册短信验证码
- 手机验证码接收注册新账户
- 手机注册验证第一步!!!
- 邮箱验证注册的思路
- 注册时在laravel用session验证手机验证码
- 实现正则验证手机的登录与注册
- asp。net制作验证码思路详解
- 绑定手机号功能,注册后在个人中心有一个绑定手机号的菜单,输入手机号码,手机接收短信验证码(有效期5分钟),,简述实现思路。
- 手机注册短信验证问题
- Linux系统直接升级GLIBC版本
- AppCompatDelegate夜间模式
- spyder的工作路径和python的搜索路径
- Oracle-性能优化(二)
- kotlin开发Android入门篇四接口的创建和使用
- 详解手机注册验证码操作思路与流程
- Java的常见类
- pymongo使用总结
- 织梦DedeTag Engine Create File False的彻底解决方法总汇
- poj1186——方程的解数
- -Xdebug 启动命令
- Android WebView 总结 —— 硬件加速使用HTML5播放视频及全屏方案
- 应用系统架构设计
- Csdn修改账户手机绑定问题