邀请码实现(六位不重复)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
	}

猜你喜欢

转载自blog.csdn.net/qq_28202661/article/details/84883411