1
9hills 2012-08-15 18:56:49 +08:00 1
每位都random一下不就好了,然后拼起来
|
2
luin 2012-08-15 19:18:06 +08:00
同上……又快又省事
|
3
cmaxvv 2012-08-15 19:20:00 +08:00 1
如果长度没有要求,直接uuid
或者,随机数,然后转成(10个数字+26个字母)36进制 |
4
PrideChung 2012-08-15 19:42:09 +08:00
简单的就生成GUID然后按需要长度截取,绝对唯一是不可能的,MD5还会有碰撞呢。
|
5
sethverlo 2012-08-15 19:58:18 +08:00
我想过这个问题。直接对时间进行 md5 貌似可以吧?
1L 和 2L 的算法还得判重呢。。 顺便问 @PrideChung 已知的碰撞已经有了么?只记得好早以前说中国的那个专家说会有碰撞。一直没见过碰撞的情况。。。 |
7
alvin2ye 2012-08-15 21:20:40 +08:00
ruby version
rand(36**40).to_s 36 |
8
lisztli 2012-08-15 21:29:05 +08:00
「唯一」的「随机字符串」
你不觉得这俩词矛盾吗? |
9
hahastudio 2012-08-15 21:34:06 +08:00
再大的枚举空间,不也是有穷的么= =
先随机一个字符串,然后hash判重?重复就再随机好了= = |
10
CoX 2012-08-15 21:36:45 +08:00 1
import random
from string import letters,digits def GetSalt(num=8): ----item = random.sample((letters+digits)*num,num) ----return ''.join(item) |
12
alvin2ye 2012-08-15 23:42:57 +08:00
@fwee
[~] $ irb ree-1.8.7-2011.03 :001 > rand(36**40).to_s 36 => "ueyvoa25sa7x3i1tzdlrz8h0rqf0a7in5jjje0jj" |
14
ipconfiger 2012-08-16 10:57:49 +08:00
精确控制频率很困难,但是如果要大致上差不离就简单
In [2]: import random In [3]: sample="1234567890" In [4]: random.sample(sample,4) Out[4]: ['2', '0', '3', '9'] In [5]: "".join(random.sample(sample,10)) Out[5]: '6751093482' 现在实现了出随机数,如果要增加1出现的频率,那么就把sample的值改成 sample="11111234567890" 然后继续生成 In [7]: "".join(random.sample(sample,10)) Out[7]: '5110381461' 看,1出现的频率就增加了。 至于要又有字母又有数字还要大小写的 sample="1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM" 就ok了,要谁出现的频率高就多打几个就ok了 |
15
ratazzi 2012-08-16 11:02:08 +08:00 1
$ which secret.gen
secret.gen: aliased to head -2 /dev/urandom | sha1sum | base64 |
16
chshouyu 2012-08-16 12:05:41 +08:00
md5或者sha1算法
|
17
Mutoo 2012-08-16 12:23:09 +08:00
php底下有uniqid http://www.w3school.com.cn/php/func_misc_uniqid.asp
|
18
zhaobei92 2012-08-17 00:17:41 +08:00
from random import randint
p=file('a.txt','a+') pt=p.readlines() p.seek(0) N='abcdefghijklmnopqrstuvwxyz' M=N.upper() L='1234567890' S=N+M+L def func(x): s='' for i in range(10): t=randint(0,len(x)-1) s+=x[t] return s mima=func(S) print mima def dis(mima): for i in pt: if i==mima: mima=func(S) dis(mima) p.write('\n'+mima) p.close() dis(mima) print pt |
19
zhaobei92 2012-08-17 00:19:04 +08:00
哎呦,没有缩进。python太难看了。
通过将生成的序列号放在文件里,然后进行读取判断,防止重复。 |
20
zhaobei92 2012-08-17 00:19:59 +08:00
程序缩进后应该没问题。这个是我测试生成的。
cpiESpUxAw e0dgnfajte xEHvectmXm A6aTEBL8HI D3wAabuvXS L1gOjovfrb Ica2dJQPC1 |
21
chx007 2012-08-17 10:15:41 +08:00
uuid后再将其16进制值转为62进制值 [大小写字母(26+26) + 数字 (10) ]
|