2012-09-06 194 views
1

如何使我的ID生成器代码优雅:当用户注册时,他们得到一个ID ..该ID生成的机会不会是唯一的机会是什么?另外 - 我怎样才能让我的代码优雅? 感谢!PHP半随机字符串生成器

#hash = random url generated from 128 chars 

$cac = substr($hash, 64,-60); 

$words = array('GET', 'COOL', 'WOW', 'YES', 'NICE', 'BUCK', 'LUCK', 'FUN', 'CASH', 'TIP', 'PEEK', 'TAG'); 
$rword = rand(0,11); 

$syms = array('-', '#', '$', '@'); 
$rsym = rand(0,3); 

$nums = rand(0,9); 

$aff_id_temp = $words[$rword] . $syms[$rsym] . $cac . $nums; 
$final_id = strtoupper($aff_id_temp); 

--- UPDATE --- 该代码有效。只需在注册时为用户生成一个简单的会员ID。我的意思是优雅 - 也许我以最简单的方式或以不同的方式(也许在循环中)完成最终产品代码的方式,基本上我想学习不同的方法来达到相同的结果。我想要其他编码观点。

的输出是一样的东西:TIP#6C1D2

+0

定义你所说的优雅。具体问题是什么。这也有助于了解您正在尝试做什么以及预期的产出。 – Brad

+0

可能性:'!i' ... :) –

+0

如何:md5($ salt。$ user ['email']); – HappyTimeGopher

回答

1

几乎为零,由于哈希值。这就是说,它完全取决于散列函数。

不包括散列,任何给定ID与另一个给定ID冲突的概率为1/(12*4*10) = 1/480,大约为0.2%。但是,新ID不会与任何其他ID冲突的机会是1-(1-1/480)^c,其中c是您已拥有的ID数。只有50个ID,你已经有10%的碰撞几率。

您可以使用uniqid函数获得唯一的散列。

+0

我的散列正在使用'rand'1,1B生成然后' SHA512的哈希值 - 我的HASH如何影响你的等式? – fyz

+0

除了'HASH'我更感兴趣的是$ final_id - >还有什么可以得到相同的结果。我觉得他们更“优雅”或不同的解决方案。谢谢您的帮助! – fyz