12位随机数,可以有字母。一年内不重复如何解决

一次生成四个随机号码,12位,可以字母和数字的组合,不能有规律,一年内不能重复。要考虑并发。有没有不去对比以前的,生成后就保证不重复。如果用oracle生成序列的话要如何转才能不看出规律?

xiongjinpeng
xiongjinpeng 2012-06-28 11:37:35 去掉年,还有10个数字,精确到秒,即并发控制到秒,最好是10位+2位随机。
8 年多之前 回复
petty108
petty108 您采纳的答案还是有规律性啊
8 年多之前 回复

19个回答

[code="java"]
System.out.println(Long.toString(new Date().getTime(), 36));
[/code]

这里只有数字和字母,只有8位。
要筹12位可以再加入一些随机数。

babpap
babpap 加入随机因子就是考虑线程安全
8 年多之前 回复
iteye_8312
iteye_8312 没考虑线程安全问题。如果两线程同时运行,在特定条件下可产生相同两条标识。需要加上线程号与当前机器的信息
8 年多之前 回复
babpap
babpap 不知道这个id你是只用作服务器端的唯一标识,还是移动客户端也需要显示的。 如果移动客户端需要用户输入的话,建议最好弄成全字母或者全数字, 这样好记,而且也方便用户输入(不需要切换软键盘)
8 年多之前 回复
daipingzhang
daipingzhang 高。。实在是高
8 年多之前 回复

时间戳+访问者IP地址 加密

zhaozhenfei500
zhaozhenfei500 这个肯定可以,但是应该超过12位了
8 年多之前 回复

实现了一个算法,思想就是一对多映射;
以下为从100000000000开始的序列映射的结果:
dA99iA6ANirN
dNiiArNNAi9h
e9NN6NAr9N6X
h9A9966AANrt
O6NA6rAri9AP
MAN99A9NN6NE
eNiA6ArA6r6g
d6N99N96rNrk
Oi696AriA6NI
eArAN9irA6r2
SAiiNA6r6rSr
SiN9iNiAN6hM
ei966rAr9idC

cmyx2008love
晓星 把你的算法贴出来看看嘛!
8 年多之前 回复

UUID不行吗? :oops:

zhaozhenfei500
zhaozhenfei500 特殊处理的时候不好保证唯一性啊
8 年多之前 回复
shaogeiwojijiwaiwai
shaogeiwojijiwaiwai 特殊处理一下噻~!
8 年多之前 回复
duchaopeng
duchaopeng 12位的uuid?
8 年多之前 回复

时间戳级够了,另外4位随便取,在并发情况下时间戳可能一样吗?

duchaopeng
duchaopeng 同时生成四个,一定不行的。考虑并发更不可能了而且不能有规律,不能看到来日期的
8 年多之前 回复

如果考虑并发就把生成编号的类设计成单例模式,然后加锁便可

jsj_spark
jsj_spark 嗯。单例模式,然后加锁。
8 年多之前 回复

同意楼上 UUID 然后截取12位

panny1982
panny1982 怎么不合适 如果还是怕有重复的话,那就uuid随机取几位+ oracle生成序列=12位随机。
8 年多之前 回复
kku6520
kku6520 UUID 截取12位,貌似不是很合适
8 年多之前 回复

8位日期+4位随即数

必须要 12 位吗? 如果不是 12 位,可以这样 md5( uuid )

用uuid 你想要多少位就有多少位。
[code="java"]public static String createUUID(int len) {

    String uuid = java.util.UUID.randomUUID().toString()
            .replaceAll("-", "");
    return uuid.substring(0, len);
}[/code]
共19条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐