找回密码
 加入
搜索
查看: 10936|回复: 25

[效率算法] [已解决]请问如何更规范更高效的生成唯一的数字账号

 火.. [复制链接]
发表于 2013-1-15 04:54:28 | 显示全部楼层 |阅读模式
本帖最后由 kxing 于 2013-1-16 03:05 编辑

如题
就像qq号那样,能够生成一段唯一且无规律的数字串。
想过用random生成在比对已有账号,感觉效率不高且有可能死循环。
递增的话就避免不了所谓的靓号被人随意注册的情况了。
求高人指点思路,多谢!!!
发表于 2013-1-15 08:51:17 | 显示全部楼层
本帖最后由 netegg 于 2013-1-15 09:32 编辑

http://www.autoitx.com/thread-36857-1-1.html
发表于 2013-1-15 09:33:51 | 显示全部楼层
楼主描述的,是一个“不可能的任务”
发表于 2013-1-15 10:37:17 | 显示全部楼层
本帖最后由 netegg 于 2013-1-15 10:46 编辑

回复 3# annybaby
怎么讲?不就是要个比random稍好点的随机吗?为什么不可能?如果按描述是要个随机数字的话,上面已经说了,如果是按标题,造个标准的随机串(guid生成然后截取下大概就行了)
再不济,如果想自己做的话,结合不同算法,ms现有直接定义好支持的有70多种,随便整个自己玩呗
发表于 2013-1-15 11:23:00 | 显示全部楼层
回复 4# netegg

楼主当然不是想提出一个不可能的任务让大家去解决,可能是表述上有些歧义~~
楼主上面有两个关键的字眼:"死循环"和"递增",他没有给出更多的解释,所以我们都只能猜测:
因为他前面已经说了,想过比对已有账号,说明这里的"死循环"并不是指账号"重复",那么只可能是"范围上的重复"(即,因为是伪随机,产生的数据完全有可能只是在一个定义的大范围里的小范围里产生,如果也不是这个意思,那么只有上帝和楼主自己知道了)
好了,产生的数字串被定义在某个范围内,后面再产生样本就会越来越困难(理论上,你的函数样本发生器的随机性越好,生成数据越困难,并且随着时间的推移,困难会成几何级数增长,到某个临界点,就几乎完全无法再输出样本:因为在输出之前,你必须检查这个样本是否已经存在,并且很明显,已经产生的样本越多,那么新产生的那个样本存在于"已有样本"中的可能性就越大)

其次是"递增",如果范围不被扩大,那么当样本足够多时,必须会产生重复,比如:
在有N个元素的集合中,取出N+1个各重复的元素,它的不可能性是显而易见的~~

综上所述,这是个"Impossible Mission"
发表于 2013-1-15 11:43:36 | 显示全部楼层
本帖最后由 netegg 于 2013-1-15 11:54 编辑

回复 5# annybaby
这么理解虽说没什么错,但是如果生成足够多的数字序列或者依次生成递增数的情况下的终值不固定,总能找到与已有数字最相近的随机数,所以并不是impossible,还有一种超级简单的方法,创建bound number就可以满足这个条件,只是必须没有整数限定
另外,如果以random简单为例
[au3]local $i = 0, $j=1
while $j< 101
$num = random($i, 1)
consolewrite(stringtrimleft($num,2) & @cr)
$i = $num
$j+=1
wend
[/au3]
发表于 2013-1-15 12:02:10 | 显示全部楼层
回复 6# netegg

不要忽略了楼主的另一个要求就是"靓号"不能被人注册了~~

其实一个措施就可以解决所有问题:
1.直接加1
2.判断是否符合指定的"靓号"规则(或者是使用"靓号列表"的方式),如果不是"靓号",直接输出,如果是,重复上述过程
发表于 2013-1-15 12:05:49 | 显示全部楼层
本帖最后由 netegg 于 2013-1-15 12:09 编辑

回复 7# annybaby
如果是限定的话,那么就是数组了,和随机的关系就不大了
另外楼主说的好像是避免出现靓号才需要的随机,那么直接检查下就行了
发表于 2013-1-15 12:49:32 | 显示全部楼层
回复 8# netegg


    是的,所以7楼的方法最简单,方便快捷,直接过滤掉所谓的"靓号"
发表于 2013-1-15 12:50:45 | 显示全部楼层
何为靓号?无非带8、带6、临近数有重复这类,一个正则而已

如果不考虑递增只是为了这个,大可不必
发表于 2013-1-15 13:01:56 | 显示全部楼层
回复 9# annybaby
怎么加1
发表于 2013-1-15 13:04:42 | 显示全部楼层
本帖最后由 netegg 于 2013-1-15 13:05 编辑

回复 10# xiaowo
为什么非要8/6,开个玩笑,20121314算靓号吗?
发表于 2013-1-15 13:16:00 | 显示全部楼层
回复 11# netegg

比如说,初始账号为
$Number=1000000

$Number+=1
发表于 2013-1-15 13:18:10 | 显示全部楼层
回复 13# annybaby
不明白
发表于 2013-1-15 15:55:29 | 显示全部楼层
回复 12# netegg


    算,靓号一般都有特定规律的~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-13 09:34 , Processed in 0.082515 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表