日期:2014-05-17  浏览次数:20985 次

自动生成序列号问题
各位大虾由于系统需要;在每次一操作时候需要生成一个序列号,由系统自动生成;总结起来有如下要求:
1、不能重复出现两次(在不查数据库的情况下);
2、每一次生成的号码必须没有规律,即类似日期年、月、日 加时间的方式生成的不行
3、号码的位数需要尽量的小,最好别超过10位;或者10位左右吧;

大家有什么好的方法呀?

------解决方案--------------------
Guid函数 每次生成的都不一样取前10位即可
------解决方案--------------------
不查数据库,如果是单机版滴,可以把已经生成的ID保存在本地,之后随机与本地文件比对。
如果是多用户的,还是数据库吧,没啥好办法。
------解决方案--------------------
探讨

用随机数,把种子弄得好点

------解决方案--------------------
探讨
此方法确实很大限度的降低了重复出现的概率,但是系统长年累月的运行着还是有可能出现重复引用 5 楼 的

------解决方案--------------------
探讨
后面加一个递增数,以后位数会越来越多,这个系统每天会生成几千个序列号引用:

------解决方案--------------------


for(int i=0;i<a.length;i++)
{
a++;
}
用for循环,把第一列的值的每一行的值都赋上a
------解决方案--------------------
探讨

引用:

用随机数,把种子弄得好点

++
生成一个3位0-9的随机数,
生成3次,
再组合成一个9位数
重复的概率为1/1000 000 000

------解决方案--------------------
获得当前日期时间 然后再用MD5 或其他方式加密