【问题标题】:Creating a unique alphanumeric 10-character string创建唯一的 10 个字母数字字符串
【发布时间】:2009-01-21 23:10:22
【问题描述】:

我正在寻找创建一个简单的短期预订系统,并且我想生成确认号码

  • 独一无二的
  • 随机外观
  • 字母数字
  • 短,至少比 sha1 返回的 32 个字符长的字符串短得多

我只希望有大约 500 个预订,所以我不想象碰撞的可能性很大。

我的一个想法是根据日期时间戳和用户名生成一个 sha1 哈希,然后将其截断为前 10 个字符。对于处理约 500 个预订的目的,这样的东西是否足够可靠?

【问题讨论】:

    标签: random unique


    【解决方案1】:

    SHA-1 哈希的任何给定位的随机性应该没有区别,所以这是可能的。另一种方法是使用 XOR 将哈希折叠到自身中,直到您拥有 60 位的数据,然后使用 Base 64 对其进行编码以获得主要是字母数字的结果。

    仅当您希望能够为相同的输入数据重复生成相同的 Id 时,才需要这样做。否则,如果您生成一次随机 id 并在此之后保留,请使用 Anders 的建议。如果发生冲突,只需生成另一个冲突。

    【讨论】:

    • 我可以建议 base 32 代替吗?如果有人要转录这个序列,Crockford 的 Base32 是一个非常好的选择crockford.com/wrmg/base32.html
    【解决方案2】:

    你可以使用任何东西,甚至是一个普通的随机数生成器;但是,您应该检查预订代码是否已存在。如果是这种情况,请在字符串 (date+user) 中添加字符 ('x'),直到获得新的 random/sha1/etc。

    我只希望有大约 500 个预订,所以我认为冲突的可能性不大。

    另一个愚蠢的想法:生成 1000 或 2000 个具有所需属性的唯一随机数,将它们存储在某个地方,并在用户注册时将它们分配给用户 :)

    【讨论】:

      【解决方案3】:

      这是在 Perl 中执行此操作的一种方法:

      sub get_random_name()
      {
        我的@chars=('a'..'z','A'..'Z');
        我的 $random_string;
      
      

      foreach (1..22) { # rand @chars 会随机生成一个 # 介于 0 和标量之间的数字 @chars $random_string .= $chars[rand @chars]; } 返回 $random_string 。 “-”。时间(); }

      我不记得 time() 部分有多长,因此您可能需要调整数字以适合您的长度。如果不需要,也可以删除该部分。

      【讨论】:

        【解决方案4】:

        如果真的只有 500 个,则将其中的 20,000 个预先生成到一个表中,然后在需要时获取“下一个未使用的”。

        【讨论】:

        • 为什么不只生成 500 个?
        • 如果您要腌制生成器以供将来执行,是否需要在后续执行后覆盖腌制生成器以保持值。
        【解决方案5】:

        关于这个问题的一些好技巧:How do I create a random alpha-numeric string in C++?

        我会避免在字符串中包含“1”、“l”和“O”、“0”和“5”、“S”和“Z”、“2”等字符当客户需要通过电话读取您的预订代码时,他们会更容易。该链接上提供的算法应该可以帮助您做到这一点。

        【讨论】:

          【解决方案6】:

          使用向导? 16个字符,如果你真的不关心碰撞,你可以选择前n个字符。

          【讨论】:

          【解决方案7】:

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-21
            • 1970-01-01
            • 2011-08-18
            • 2014-07-08
            相关资源
            最近更新 更多