Java手机号校验、短信验证码、验证码工具类

1、手机号校验、生成短信验证码缓存redis、验证短信验证码


import com.ruoyi.common.constant.OpsConstants;
import com.ruoyi.common.entity.ValidateData;
import com.ruoyi.framework.redis.CacheTool;
import net.dreamlu.mica.core.utils.StringPool;
import net.dreamlu.mica.redis.cache.CacheKey;
import org.springframework.util.ObjectUtils;

import java.time.Duration;

public class SmsUtils {

    public static final String PHONE_RULES = "^(\\+|00){0,2}(9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)\\d{1,14}$";

    /**
     * 校验手机号
     *
     * @param phoneNum
     * @return
     */
    public static boolean checkPhoneNum(String phoneNum) {
        return !ObjectUtils.isEmpty(phoneNum) && phoneNum.matches(PHONE_RULES) && checkMobileNum(phoneNum);
    }

    /**
     * 校验手机号
     *
     * @param mobileNum
     * @return
     */
    public static boolean checkMobileNum(String mobileNum) {
        if (mobileNum.startsWith("1") && mobileNum.length() == 11) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 短信验证码缓存key
     *
     * @param uuid 手机号
     * @return
     */
    public static CacheKey getSmsKey(String uuid) {
        //格式key:模板标识:手机号
        return new CacheKey(OpsConstants.ALISMS_KEY + StringPool.COLON + uuid, Duration.ofMinutes(5));
    }

    /**
     * 生成短信验证码
     *
     * @param uuid 手机号
     * @return
     */
    public static ValidateData generateValidateData(String uuid) {
        ValidateData validateData = new ValidateData();
        String smsCode = CacheTool.getSmsCode(uuid);
        validateData.setUuid(uuid);
        validateData.setCode(smsCode);
        return validateData;
    }

    /**
     * 验证短信验证码
     *
     * @param uuid 手机号
     * @param code 验证码
     * @return
     */
    public static boolean validate(String uuid, String code) {
        return code.equals(CacheTool.getMicaRedisCache().get(getSmsKey(uuid)));
    }

}

import lombok.Data;

@Data
public class ValidateData {

    /**
     * 手机号/唯一标识
     */
    private String uuid;

    /**
     * 验证码
     */
    private String code;

}


import com.ruoyi.framework.utils.SmsUtils;
import net.dreamlu.mica.core.spring.SpringContextUtil;
import net.dreamlu.mica.core.utils.$;
import net.dreamlu.mica.core.utils.RandomType;
import net.dreamlu.mica.redis.cache.CacheKey;
import net.dreamlu.mica.redis.cache.MicaRedisCache;


/**
 * 缓存工具栏
 */
public class CacheTool {

    private static MicaRedisCache micaRedisCache;

    public static MicaRedisCache getMicaRedisCache() {
        if (micaRedisCache == null) {
            micaRedisCache = SpringContextUtil.getBean(MicaRedisCache.class);
        }
        return micaRedisCache;
    }

    /**
     * 获取短信验证码并缓存
     *
     * @param uuid 手机号/验证码类型唯一标识
     * @return 验证码
     */
    public static String getSmsCode(String uuid) {
        String code = $.random(6, RandomType.INT);
        CacheKey smsKey = SmsUtils.getSmsKey(uuid);
        getMicaRedisCache().set(smsKey, code);
        return code;
    }

}


/**
 * 数据库sms模板产量
 */
public class OpsConstants {

    /**
     * 阿里云policy缓存标识
     */
    public static final String ALIOSS_POLICY = "ali:oss_policy";

    /**
     * 阿里云sms缓存标识
     */
    public static final String ALISMS_KEY = "ali:sms_code";

    /**
     * 验证码
     */
    public static final String SMS_TEMPLATE_VALIDATE = "validate";

    /**
     * 通知
     */
    public static final String SMS_TEMPLATE_NOTICE = "notice";

    /**
     * 推广
     */
    public static final String SMS_TEMPLATE_PROMO = "promo";

}

使用

if (ObjectUtils.isEmpty(phone)) {
	return fail("手机号不能为空");
}
if (!SmsUtils.checkPhoneNum(phone) && !SmsUtils.checkMobileNum(phone)) {
	return fail("手机号码不正确");
}
if (ObjectUtils.isEmpty(code)) {
	return fail("验证码不能为空");
}
boolean validated = SmsUtils.validate(phone, code);
if (!validated) {
	return fail("验证码错误");
}

maven依赖

<properties>
	<mica.version>2.5.4</mica.version> <!-- https://mvnrepository.com/artifact/net.dreamlu/mica-bom -->
</properties>
	
<dependencyManagement>
	<dependencies>
		<dependency>
		<groupId>net.dreamlu</groupId>
		<artifactId>mica-core</artifactId>
		<version>${mica.version}</version>
		</dependency>

		<dependency>
		<groupId>net.dreamlu</groupId> <!-- redis -->
		<artifactId>mica-redis</artifactId>
		<version>${mica.version}</version>
		</dependency>   
	</dependencies>
</dependencyManagement>

2、后端生成验证码


import cn.hutool.core.util.IdUtil;
import com.ruoyi.common.entity.ValidateData;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.system.setting.security.LoginBody;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.dreamlu.mica.captcha.service.ICaptchaService;
import net.dreamlu.mica.core.result.R;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description 登陆 控制层
 */
@Slf4j
@RestController
@AllArgsConstructor
public class LoginController extends BaseController {

    private final ICaptchaService captchaService;

    /**
     * 生成验证码
     */
    @GetMapping("/captchaImage")
    public R getCode() {
        String uuid = IdUtil.fastUUID();
        String img = captchaService.generateBase64(uuid);
        ValidateData validateData = new ValidateData();
        validateData.setUuid(uuid);
        validateData.setCode(img);
        return success(validateData);
    }

    /**
     * 用户登陆
     */
    @PostMapping("/login")
    public R login(@Validated @RequestBody LoginBody loginBody) {
        boolean validated = captchaService.validate(loginBody.getUuid(), loginBody.getCode());
        if (!validated) {
            return fail("验证码错误");
        }
        //TODO

        return success();
    }

}

maven依赖

<properties>
	<hutool.version>5.7.13</hutool.version> <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
	<mica.version>2.5.4</mica.version> <!-- https://mvnrepository.com/artifact/net.dreamlu/mica-bom -->
</properties>
	
<dependencyManagement>
	<dependencies>
		<dependency>
		<groupId>cn.hutool</groupId>
		<artifactId>hutool-all</artifactId>
		<version>${hutool.version}</version>
		</dependency>

		<dependency>
		<groupId>net.dreamlu</groupId>
		<artifactId>mica-captcha</artifactId>
		<version>${mica.version}</version>
		</dependency>
	</dependencies>
</dependencyManagement>

转载请注明出处:BestEternity亲笔。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值