创建随机字符串,检查它是否存在,是否确实创建了新字符串

时间:2010-08-06 17:31:17

标签: php recursion

我想生成一个长约5个字符的随机字符串。我可以创建它,但是我无法检查它是否存在于数组(或实际情况下的数据库)中,如果存在则创建一个新数组。

我使用这样的函数来生成字符串:

function rand_string(){
    return substr(md5(microtime()), 0, 5);
}

但他们我迷路了。

  • 我需要检查它是否已经存在。
  • 如果是,请重新制作
  • 并重复

5 个答案:

答案 0 :(得分:6)

试试这个:

function rand_string(){
    $str = substr(md5(microtime()), 0, 5);
    if(exists_in_db($str)) $str = rand_string();
    return $str;
}

答案 1 :(得分:4)

只是警告一旦你确定它没有被使用,如果你通过将它添加到数据库来使用它来生成一个唯一的字符串,那么这在并发环境中是不安全的。

在你检查它不在数据库中的时间间隔内,以及稍后在另一个线程上添加包含它的记录可以做同样的事情......

如果您以这种方式使用它,可能最安全的方法是确保包含字符串的字段对其具有唯一约束并尝试添加它。如果你成功地添加它,那么你知道它是独一无二的,如果你没有,那么它就不是。在多线程环境中这是安全的。

如果您只是检查静态字符串列表并且不打算将生成的字符串添加到数据库,则忽略此帖子:P

答案 2 :(得分:2)

检查数据库中是否运行查询。

$unique=FALSE;
    while(!$unique)
      {
      $str = substr(md5(microtime()), 0, 5);
      //Insert SQL Code to check if used here
      if($row['ID']=='')
          $unique=TRUE;
      }

答案 3 :(得分:0)

在数据库上你可以..:

select substr(newid(),1,5) as name

获取新字符串并检查..:

select count(*) as cnt from yourtable where yourcolumn = __GENERATED_string__

围绕它建立一段时间,你完成了

答案 4 :(得分:0)

使用mysql_query(),使用select语句查看是否返回任何结果(即“select * from table where col1 ='String'”。然后测试是否返回任何行。循环调用这些调用直到你有一个真正随机的,未使用的值。