1. <track id="w0gxx"><strike id="w0gxx"><menu id="w0gxx"></menu></strike></track>
      2. 0712-2888027 189-8648-0214
        微信公眾號

        孝感風信網絡科技有限公司微信公眾號

        當前位置:主頁 > 技術支持 > PHP > php詳解手機注冊驗證碼操作思路與流程

        php詳解手機注冊驗證碼操作思路與流程

        時間:2024-06-18來源:風信官網 點擊: 1014次
        手機注冊驗證碼操作思路與流程

        1、前端傳入手機號參數并做驗證碼倒計時

        1. /**
        2. * 重新獲取驗證碼倒計時
        3. * @returns
        4. */
        5. reGetSMS : function () {
        6. var obj = $('#btn_getCode');
        7. // 重新發送倒計時
        8. var validCode = true;
        9. var time=60;
        10. if (validCode) {
        11. validCode = false;
        12. var t = setInterval(function () {
        13. time --;
        14. $(obj).html('重新獲取('+time+'s)');
        15. if (time==0) {
        16. clearInterval(t);
        17. $(obj).html("重新獲取");
        18. validCode = true;
        19. sms_flag = true;
        20. }
        21. },1000);
        22. }
        23. }
        2、隨機生成驗證碼
        1. public static String getSMSCode() {
        2. return String.valueOf((int)(Math.random() * 9000) + 1000);
        3. }
        3、將生成的驗證碼通過第三方接口已短信形式發送給手機
        1. /**
        2. *參數是手機號碼和由驗證碼組成的字符串
        3. */
        4. private static boolean send(String phone, String content) throws Exception {
        5.  
        6. // 創建StringBuffer對象用來操作字符串
        7. StringBuffer sb = new StringBuffer("http://http.yunsms.cn/tx/?");
        8. // 向StringBuffer追加用戶名
        9. sb.append("uid=56262");
        10. // 向StringBuffer追加密碼(密碼采用MD5 32位 小寫)
        11. sb.append("&pwd=3019654cd7d57f8a8464e2b63f8c923c");
        12. // 向StringBuffer追加手機號碼
        13. sb.append("&mobile=" + phone);
        14. // 向StringBuffer追加消息內容轉URL標準碼
        15. sb.append("&content=" + URLEncoder.encode(content,"gbk"));
        16. BufferedReader in = null;
        17. URL url = null;
        18. HttpURLConnection connection = null;
        19. int result = 0;
        20. try {
        21. url = new URL(sb.toString());
        22. connection = (HttpURLConnection) url.openConnection();
        23. connection.setRequestMethod("POST");
        24. in = new BufferedReader(new InputStreamReader(url.openStream()));
        25. result = Integer.parseInt(in.readLine());
        26. } catch (Exception e) {
        27. throw new Exception("發送短信失敗",e);
        28. } finally {
        29. if (in != null) {
        30. in.close();
        31. }
        32. if (connection != null) {
        33. connection.disconnect();
        34. }
        35. }
        36. return result == SUCCESS_SMS;
        37. }
        4、保存驗證碼到數據庫

        要點: a、需要存的參數手機號、驗證碼、開始時間、結束時間

        1. public class SMSDto {
        2.  
        3. /** 手機號碼 */
        4. private String phone;
        5. /** 短信驗證碼 */
        6. private String sms_code;
        7. /** 開始時間(當前秒數) */
        8. private String begin_time;
        9. /** 到期時間(當前秒數 + 有效期) */
        10. private String end_time;
        11.  
        12. /**
        13. * 默認構造方法
        14. */
        15. public SMSDto() {
        16. super();
        17. }
        18.  
        19. /**
        20. * 生成驗證碼
        21. * @param phone 手機
        22. * @param sms_code 驗證碼
        23. */
        24. public SMSDto(String phone, String sms_code) {
        25. super();
        26. this.phone = phone;
        27. this.sms_code = sms_code;
        28. int cur = (int) (System.currentTimeMillis() / 1000);
        29. this.begin_time = String.valueOf(cur);
        30. this.end_time = String.valueOf(cur + GlobalContract.TIME_SMS);
        31. }
        32. }
        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{ //已過期 }

        實現層關鍵代碼:

        1. //準備驗證碼
        2. private ResultVO sendSmsCode(String phone) throws Exception{
        3. log.info(GlobalContract.LOG_BEGIN);
        4. ResultVO resultVO = null;
        5.  
        6. // 1.生成驗證碼
        7. String random = SMSUtil.getSMSCode();
        8. // 2.發送驗證碼
        9. if(SMSUtil.sendSMS(phone, random)){
        10. // 3.保存驗證碼
        11. SMSDto sms = new SMSDto(phone, random);
        12. SMSDto smsDto = smsUserDao.getSMSCode(phone);
        13. if (smsDto == null) {
        14. // 新增驗證碼
        15. smsUserDao.addUserSMS(sms);
        16. } else {
        17. // 修改驗證碼
        18. smsUserDao.updateUserSMS(sms);
        19. }
        20.  
        21. resultVO = new ResultVO();
        22. } else {
        23. resultVO = new ResultVO(GlobalMessage.MSG_07);
        24. }
        25. log.info(GlobalContract.LOG_END);
        26. return resultVO;
        27. }
        SMSUtil類關鍵代碼:
        1. public class SMSUtil {
        2.  
        3. /** 短信模板 */
        4. private static final String CONTENT_0 = "(驗證碼)感謝您的支持,祝您生活愉快!【xxx】";
        5. /** SMS發送成功 */
        6. public static final int SUCCESS_SMS = 100;
        7.  
        8. // public static void main(String[] args) throws Exception {
        9. // System.out.println(sendSMS("18018025014", "123456"));
        10. // }
        11.  
        12. /**
        13. * 發送驗證碼
        14. * @param phone 手機
        15. * @param random 驗證碼
        16. * @return
        17. */
        18. public static boolean sendSMS(String phone, String random) throws Exception {
        19.  
        20. return send(phone, random.concat(CONTENT_0));
        21. }
        22.  
        23. /**
        24. * 生成驗證碼
        25. * @return
        26. */
        27. public static String getSMSCode() {
        28.  
        29. return String.valueOf((int)(Math.random() * 9000) + 1000);
        30. }
        31.  
        32. /**
        33. * 發送短信
        34. * @param phone 手機號碼
        35. * @param content 發送內容
        36. * @return
        37. */
        38. private static boolean send(String phone, String content) throws Exception {
        39.  
        40. // 創建StringBuffer對象用來操作字符串
        41. StringBuffer sb = new StringBuffer("http://http.yunsms.cn/tx/?");
        42. // 向StringBuffer追加用戶名
        43. sb.append("uid=56262");
        44. // 向StringBuffer追加密碼(密碼采用MD5 32位 小寫)
        45. sb.append("&pwd=3019654cd7d57f8a8464e2b63f8c923c");
        46. // 向StringBuffer追加手機號碼
        47. sb.append("&mobile=" + phone);
        48. // 向StringBuffer追加消息內容轉URL標準碼
        49. sb.append("&content=" + URLEncoder.encode(content,"gbk"));
        50. BufferedReader in = null;
        51. URL url = null;
        52. HttpURLConnection connection = null;
        53. int result = 0;
        54. try {
        55. url = new URL(sb.toString());
        56. connection = (HttpURLConnection) url.openConnection();
        57. connection.setRequestMethod("POST");
        58. in = new BufferedReader(new InputStreamReader(url.openStream()));
        59. result = Integer.parseInt(in.readLine());
        60. } catch (Exception e) {
        61. throw new Exception("發送短信失敗",e);
        62. } finally {
        63. if (in != null) {
        64. in.close();
        65. }
        66. if (connection != null) {
        67. connection.disconnect();
        68. }
        69. }
        70. return result == SUCCESS_SMS;
        71. }
        72.  
        73. }
        熱門關鍵詞: php 手機注冊 驗證碼
        欄目列表
        推薦內容
        熱點內容
        展開
        久久99精品久久久久久久不卡_日本一区二区三不卡高清区免费_久久精品无码免费观看_麻豆av一区二区无码