目前我就想用php写一个guid生成的CDKey,并且只生成20位,要确保它唯一。
有没有大神帮个忙回答下~
理论上,任何定长度的编码,都不能做到唯一。因为它的总编码是有限的。只是这个值非常非常大。
在工程上,我们可以将重复概率极小,可以忽略不计的编码视作是唯一的。guid就是这个,要让这个概率低,那么取决于两点,一个是充分的随机化,一个是编码长度要长。
结论就是,guid截取20位提高了重复的概率,但是在一定程度上仍然可以视作是唯一的。比如说你的软件卖100万份,这个很多了吧。有100万个key
100万也就是10的6次方。16的5次方。
20位guid的总编码数是 16的20次方。
重复的概率可以算出来,等于16的15次方,也就是100万的3次方。
我举一个例子,把一根针丢到太平洋和丢到印度洋,找到它的概率明显后者更高,但是在工程上看,都可以视作不可能找到。但是在理论上,都是能找到的。对吧。