package com.mashibing.serviceverificationcode.service.impl;
import com.mashibing.internalcommon.constant.CommonStatusEnum;
import com.mashibing.internalcommon.constant.IdentityConstant;
import com.mashibing.internalcommon.constant.RedisKeyPrefixConstant;
import com.mashibing.internalcommon.dto.ResponseResult;
import com.mashibing.internalcommon.dto.serviceverificationcode.response.VerifyCodeResponse;
import com.mashibing.serviceverificationcode.service.VerifyCodeService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundValueOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
/**
* @author yueyi2019
*/
@Service
public class VerifyCodeServiceImpl implements VerifyCodeService {
@Autowired
private RedisTemplate<String, String> redisTemplate;
/**
* 生成验证码
* @param identity
* @param phoneNumber
* @return
*/
@Override
public ResponseResult<VerifyCodeResponse> generate(int identity , String phoneNumber){
//校验 发送时限,三挡验证,不能无限制发短信
// checkSendCodeTimeLimit(phoneNumber);
// 0.9*9=8.1+1 9,去掉首位为0的情况。 0.11225478552211(0.0-<1)
String code = String.valueOf((int)((Math.random() * 9 + 1) * Math.pow(10,5)));
/**
* 有人用这种写法。生成6位code,错误用法,虽然大部分情况下结果正确,但不能这么用,偶尔位数不够?
*/
// String code = String.valueOf(new Random().nextInt(1000000));
//生成redis key
String keyPre = generateKeyPreByIdentity(identity);
String key = keyPre + phoneNumber;
//存redis,2分钟过期
BoundValueOperations<String, String> codeRedis = redisTemplate.boundValueOps(key);
// Boolean aBoolean = codeRedis.setIfAbsent(code);
// if (aBoolean){
// codeRedis.expire(2,TimeUnit.MINUTES);
// }
codeRedis.set(code,2,TimeUnit.MINUTES);
// codeRedis.expire(2,TimeUnit.MINUTES);
//返回
VerifyCodeResponse result = new VerifyCodeResponse();
result.setCode(code);
return ResponseResult.success(result);
}
@Override
public ResponseResult verify(int identity,String phoneNumber,String code){
//三档验证
//生成redis key
String keyPre = generateKeyPreByIdentity(identity);
String key = keyPre + phoneNumber;
BoundValueOperations<String, String> codeRedis = redisTemplate.boundValueOps(key);
String redisCode = codeRedis.get();
if(StringUtils.isNotBlank(code)
&& StringUtils.isNotBlank(redisCode)
&& code.trim().equals(redisCode.trim())) {
return ResponseResult.success("");
}else {
return ResponseResult.fail(CommonStatusEnum.VERIFY_CODE_ERROR.getCode(), CommonStatusEnum.VERIFY_CODE_ERROR.getValue());
}
}
/**
* 判断此手机号发送时限限制
* @param phoneNumber
* @return
*/
private ResponseResult checkSendCodeTimeLimit(String phoneNumber){
//判断是否有 限制1分钟,10分钟,24小时。
return ResponseResult.success("");
}
/**
* 根据身份类型生成对应的缓存key
* @param identity
* @return
*/
private String generateKeyPreByIdentity(int identity){
String keyPre = "";
if (identity == IdentityConstant.PASSENGER){
keyPre = RedisKeyPrefixConstant.PASSENGER_LOGIN_CODE_KEY_PRE;
}else if (identity == IdentityConstant.DRIVER){
keyPre = RedisKeyPrefixConstant.DRIVER_LOGIN_CODE_KEY_PRE;
}
return keyPre;
}
/**
* 三档验证校验
* @param phoneNumber
* @param code
* @return
*/
private ResponseResult checkCodeThreeLimit(String phoneNumber,String code){
//看流程图
return ResponseResult.success("");
}
public static void main(String[] args) {
// int count = 0;
// for (int i = 0; i < 5000; i++) {
//// String code = String.valueOf(new Random().nextInt(1000000));
// String code = String.valueOf((int)((Math.random()*9+1)*Math.pow(10,5)));
// if (code.length()<6){
// System.out.println("有小于6位长的数"+i);
// count++;
// }
// }
// System.out.println(count);
// ----------------------------------------------------------------------
//// System.out.println(Math.random());
// int sum = 10000000;
//// int sum = Integer.MAX_VALUE;
// System.out.println(sum);
// long start = System.currentTimeMillis();
// for (int i = 0; i < sum; i++) {
// String a = (Math.random() + "").substring(2,8);
// }
// System.out.println("字符串截取时间:"+(System.currentTimeMillis() - start));
//
// long start1 = System.currentTimeMillis();
// for (int i = 0; i < sum; i++) {
// String a = String.valueOf((int)((Math.random()*9)*Math.pow(10,5)));
// }
// System.out.println("字符串求乘方:"+(System.currentTimeMillis() - start1));
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
网约车三期项目-online-taxi-three.zip
共73个文件
java:38个
class:19个
xml:6个
需积分: 0 0 下载量 93 浏览量
2023-11-06
23:07:41
上传
评论
收藏 93KB ZIP 举报
温馨提示
网约车三期项目-online-taxi-three
资源推荐
资源详情
资源评论
收起资源包目录
网约车三期项目-online-taxi-three.zip (73个子文件)
online-taxi-three-master
api-passenger
pom.xml 1KB
src
main
resources
application.yml 265B
java
com
mashibing
apipassenger
controller
VerificationCodeController.java 955B
AuthController.java 1016B
service
ServiceSmsRestTemplateService.java 298B
ServicePassengerUserService.java 208B
AuthService.java 203B
ServiceVerificationCodeRestTemplateService.java 329B
impl
ServicePassengerUserServiceImpl.java 1KB
ServiceSmsRestTemplateServiceImpl.java 2KB
AuthServiceImpl.java 2KB
VerificationCodeServiceImpl.java 2KB
ServiceVerificationCodeRestTemplateServiceImpl.java 2KB
VerificationCodeService.java 268B
request
UserAuthRequest.java 540B
ShortMsgRequest.java 658B
ApiPassengerApplication.java 430B
config
RestTemplateConfiguration.java 363B
target
classes
application.yml 265B
com
mashibing
apipassenger
ApiPassengerApplication.class 815B
pom.xml 4KB
service-verification-code
pom.xml 2KB
src
main
resources
application.yml 269B
java
com
mashibing
serviceverificationcode
controller
VerifyCodeController.java 1KB
service
VerifyCodeService.java 728B
impl
VerifyCodeServiceImpl.java 5KB
ServiceVerificationCodeApplication.java 599B
service-sms
pom.xml 704B
cloud-eureka
pom.xml 2KB
src
main
resources
application.yml 394B
java
com
mashibing
cloudeureka
CloudEurekaApplication.java 434B
target
classes
application.yml 394B
com
mashibing
cloudeureka
CloudEurekaApplication.class 817B
internal-common
pom.xml 1KB
src
main
java
com
mashibing
internalcommon
constant
CommonStatusEnum.java 1KB
RedisKeyPrefixConstant.java 569B
HttpUrlConstants.java 225B
IdentityConstant.java 262B
InternalCommonApplication.java 349B
dto
servicesms
SmsTemplateDto.java 382B
request
SmsSendRequest.java 467B
serviceverificationcode
response
VerifyCodeResponse.java 190B
request
VerifyCodeRequest.java 243B
servicepassengeruser
T.java 83B
request
LoginRequest.java 194B
ResponseResult.java 2KB
util
SnowflakeUtils.java 4KB
JwtUtil.java 2KB
JwtInfo.java 134B
OrderIdUtils.java 879B
RedisKeyUtil.java 74B
target
classes
com
mashibing
internalcommon
constant
CommonStatusEnum.class 2KB
IdentityConstant.class 432B
HttpUrlConstants.class 506B
RedisKeyPrefixConstant.class 720B
dto
servicesms
request
SmsSendRequest.class 2KB
SmsTemplateDto.class 2KB
serviceverificationcode
response
VerifyCodeResponse.class 1KB
request
VerifyCodeRequest.class 2KB
ResponseResult.class 4KB
servicepassengeruser
T.class 336B
request
LoginRequest.class 2KB
InternalCommonApplication.class 757B
util
RedisKeyUtil.class 329B
JwtInfo.class 2KB
SnowflakeUtils.class 3KB
OrderIdUtils.class 1KB
JwtUtil.class 3KB
internal-common-1.0-SNAPSHOT.jar 21KB
maven-status
maven-compiler-plugin
compile
default-compile
createdFiles.lst 1KB
inputFiles.lst 2KB
testCompile
default-testCompile
inputFiles.lst 0B
maven-archiver
pom.properties 120B
共 73 条
- 1
资源评论
武昌库里写JAVA
- 粉丝: 3136
- 资源: 1872
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功