2017-11-11 1543 views
0

我有我的index.php文件下面的代码给人一种独特的数字ID的名称

<?php 
$name = $_GET['name']; 
$id = rand(0,100); // i need a unique id from the name than random 
?> 

我想要做的是,当有人提供他们的姓名,0和100之间的唯一数字ID应该显示。刷新页面后不应更改。如果用户提供名称“John”,id应该是“99”(或任何其他不会更改的号码) 如果用户提供名称“david”,则id应该是“5”(或任何其他号码不会改变)

我试过使用MD5,但它会产生更多的数字,我不能使用它,因为我是一个PHP新手。

对不起,我的英语不好。

+0

那么这段代码有什么问题?这应该给你随机数。你有刷新或什么问题? 'md5'不是随机的,它会为每个名称生成相同的值(并且对于不同的名称可能具有相同的值(https://crypto.stackexchange.com/questions/1434/are-there-two-known-strings哪位-具有最相同-MD5哈希值))。 – chris85

+0

超过2-3位数字有什么问题? –

回答

0

rand()函数只给你随机数,但它永远不会给你任何单词的唯一编号。最好的解决方案是使用md5,它将您的名字转换为总是唯一的 字符串。如果您需要md5的帮助,请告诉我。

+0

我需要生成一个只包含数字(0到100之间)的md5散列。必须有机会获得每个名字的所有100个号码。 –

+0

md5无法生成0到100之间的数字,如果使用rand(),则该数字对于每个名称都不是唯一的。 –

0

在数组中创建一个数组的数组,然后我们对其进行洗牌。获取混洗阵列的元素。

function generateRandomNumberInRange($min, $max, $quantity) { 
    $randomNumberArray = range($min, $max); 
    shuffle($randomNumberArray); 
    return array_slice($randomNumberArray, 0, $quantity); 
} 

echo "<pre>"; 
$numbersArray = generateRandomNumberInRange(0, 100, 101); 
print_r($numbersArray); 
echo "</pre>" 

for ($i = 0; $i <= 100; $i++) { 
    echo $numbersArray[$i] . "<br/>"; 
} 

然后,您将名称分配给唯一和随机数。