影片直播系統原始碼,java 隨機驗證碼 、10 分鐘有效

zhibo系統開發發表於2023-03-01

影片直播系統原始碼,java 隨機驗證碼 、10 分鐘有效

 1.首先建立一個vo類存放我們驗證碼相關資訊。

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
import java.io.Serializable;
import java.util.Date;
 
/**
 * @Author Lxq
 * @Date 2020/12/7 17:30
 * @Version 1.0
 * <p>
 * 存放驗證碼相關內容,這個物件是放在redis中
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class VerifyCodeVO implements Serializable {
    /**
     * 驗證碼
     */
    private Integer verifyCode;
    /**
     * 傳送驗證碼的手機號
     */
    private String phoneNumber;
    /**
     * 最近成功傳送時間
     */
    private Date lastSendTime;
    /**
     * 可用次數
     */
    private Integer availableTimes;
}


2.當前時間與晚上十二點的秒差

/**
     * 當前時間與晚上十二點的秒差
     *
     * @return
     */
    private Long nowTo12ClockTime() {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_YEAR, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.MILLISECOND, 0);
 
        //當前時間與晚上十二點的秒差
        return (calendar.getTimeInMillis() - System.currentTimeMillis()) / 1000;
    }


3.傳送驗證碼的具體方法

 @Override
    public void sendVerificationCode(String phoneNumber) {
        if (phoneNumber == null) {
            throw new CustomException("手機號碼不能為空!");
        }
        // 從redis中獲取手機號碼對應物件資訊
        VerifyCodeVO verifyCodeVO = redisUtils.get(phoneNumber, VerifyCodeVO.class);
        if (verifyCodeVO != null) {
            long lastSendTime = verifyCodeVO.getLastSendTime().getTime();
            long now = System.currentTimeMillis();
            if ((now - lastSendTime) / 1000 < 60) {
                throw new CustomException("請不要頻繁獲取驗證碼!");
            }
            Integer availableTimes = verifyCodeVO.getAvailableTimes();
            if (availableTimes.equals(0)) {
                throw new CustomException("今日驗證碼次數已使用完畢!");
            }
            // 次數減一
            verifyCodeVO.setAvailableTimes(verifyCodeVO.getAvailableTimes() - 1);
            // 重新生成新驗證碼
            int random = (int) ((Math.random() * 9 + 1) * 100000);
            verifyCodeVO.setVerifyCode(random);
            verifyCodeVO.setLastSendTime(new Date());
            redisUtils.set(phoneNumber, verifyCodeVO, nowTo12ClockTime());
            // 非同步傳送簡訊
            String id = ArpSmsTemplateEnum.APP_DATA_VERIFICATION_CODE.getId();
            Integer parameters = ArpSmsTemplateEnum.APP_DATA_VERIFICATION_CODE.getParameters();
            AsyncManager.me().ttlExecute(AsyncMessageFactory.sendBusinessSms(id, new String[]{"+86" + phoneNumber}, new String[]{String.valueOf(random)}, parameters));
 
        } else {
            int random = (int) ((Math.random() * 9 + 1) * 100000);
            VerifyCodeVO vc = new VerifyCodeVO();
            vc.setPhoneNumber(phoneNumber);
            vc.setVerifyCode(random);
            vc.setLastSendTime(new Date());
            vc.setAvailableTimes(9);
            redisUtils.set(phoneNumber, vc, nowTo12ClockTime());
            // 模板ID
            String id = ArpSmsTemplateEnum.APP_DATA_VERIFICATION_CODE.getId();
            Integer parameters = ArpSmsTemplateEnum.APP_DATA_VERIFICATION_CODE.getParameters();
            AsyncManager.me().ttlExecute(AsyncMessageFactory.sendBusinessSms(id, new String[]{"+86" + phoneNumber}, new String[]{String.valueOf(random)}, parameters));
        }
    }


備註:簡訊介面是呼叫騰訊雲介面,自行解決


4.接收驗證碼介面

 @Override
    public Integer getVerificationCode(String phoneNumber) {
        VerifyCodeVO verifyCodeVO = redisUtils.get(phoneNumber, VerifyCodeVO.class);
        if (verifyCodeVO == null) {
            throw new CustomException("請先獲取手機驗證碼!");
        }
        long currentTimeMillis = System.currentTimeMillis();
        long lastTime = verifyCodeVO.getLastSendTime().getTime();
        // 10 分鐘有效期
        if ((lastTime + (10 * 60 * 1000)) < currentTimeMillis) {
            throw new CustomException("驗證碼已過期,請重新獲取!");
        }
        return verifyCodeVO.getVerifyCode();
    }


 以上就是影片直播系統原始碼,java 隨機驗證碼 、10 分鐘有效, 更多內容歡迎關注之後的文章


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2937587/,如需轉載,請註明出處,否則將追究法律責任。

相關文章