【发布时间】:2011-01-17 21:14:36
【问题描述】:
我需要生成满足以下要求的字符串:
- 应该是唯一的字符串;
- 字符串长度应为 8 个字符;
- 应包含 2 位数字;
- 所有符号(非数字字符)都应为大写。
生成后我会将它们存储在数据库中(它们将分配给其他实体)。
我的意图是做这样的事情:
- 生成 2 个从 0 到 9 的随机值——它们将用于字符串中的数字;
- 从 0 到 25 生成 6 个随机值,并将它们添加到 64——它们将用作 6 个符号;
- 将所有内容连接成一个字符串;
- 检查字符串是否已经存在于数据库中;如果没有,请重复。
我对该算法的担忧是它不能保证在有限时间内得到结果(如果数据库中已经有很多值)。
问题:您能否就如何改进该算法使其更具确定性提供建议?
谢谢。
【问题讨论】:
-
对于初学者,您需要计算出从这些组合中获得了多少可能性。
-
数据库中的值...它们也遵循这种模式吗?你知道生成它们的论坛吗?你能在数据库的字符串中找到一个模式吗?否则,您将始终有碰撞的风险......
-
为什么需要随机性?为什么不能使用顺序字符串?
-
这很难同时保持高斯分布。
-
我展示了大约 240 亿种可能的组合。由于生日悖论,您将在大约平方根或大约 15 万处开始遇到碰撞问题。
标签: algorithm random uniqueidentifier