版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28202661/article/details/84883411
实现思路:数据库 + UUID
小贴士:
UUID是1.5中新增的一个类,在java.util下,用它可以产生一个号称全球唯一的ID
UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
也就是说在几乎同一时间内生成的序列,前几位不同,但后几位可能是一样的
UUID的唯一缺陷在于生成的结果串会比较长(16位),那么如果我们不要那么多位呢?
其实吧,UUID生成的前几位重复的概率也很低,为了保证生成的有效性,我们利用数据库来结合就好啦。
1.具体实现
public String getOneCode() throws Exception {
// TODO Auto-generated method stub
// 邀请码
String testCode = null;
List<PollCode> resDao = null;
Boolean flag = true;
while (flag) {
// 生成一个六位邀请码,小写字母换成大写
testCode = UUID.randomUUID().toString().replace("-", "").substring(0, 6).toUpperCase();
resDao = new ArrayList<>();
resDao = mapper.selectByCode(testCode);
if (StringUtil.isEmpty(resDao)) {
// 数据库未存在,插入数据库,并返回该邀请码,否则继续循环重新生成一个
PollCode pol = new PollCode();
pol.setPollCode(testCode);
pol.setState("未注册");
mapper.insert(pol);
flag = false;
return testCode;
}
}
return null;
}