代码之家  ›  专栏  ›  技术社区  ›  Ben Shelock

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

  •  3
  • Ben Shelock  · 技术社区  · 15 年前

    我想生成一个大约5个字符长的随机字符串。我可以创建它,但我在检查它是否存在于数组(或实际情况下的数据库)中以及是否存在于新的数组中时遇到了问题。

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

    但是我迷路了。

    • 我需要检查它是否已经存在。
    • 如果有,做一个新的
    • 再重复一遍
    5 回复  |  直到 15 年前
        1
  •  7
  •   Jacob Relkin    15 年前

    试试这个:

    function rand_string(){
        $str = substr(md5(microtime()), 0, 5);
        if(exists_in_db($str)) $str = rand_string();
        return $str;
    }
    
        2
  •  5
  •   jcoder    15 年前

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

    在检查它不在数据库中,以及稍后在另一个线程上添加包含它的记录之间的时间间隔内,可以执行相同的操作。。。

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

    如果您只是对照一个静态字符串列表进行检查,而不打算将生成的字符串添加到数据库中,那么请忽略以下内容:P

        3
  •  2
  •   ari_aaron    15 年前

    要检查它是否在数据库中,请在之后运行查询。

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

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

    对于新字符串和检查..:

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

    在它周围建立一段时间,你就完成了

        5
  •  0
  •   websch01ar    15 年前

    推荐文章