生成一个十进制的aleatoire组合,确保不会生成此组合的副本

时间:2016-08-03 13:31:11

标签: c# algorithm probability

我编写了以下方法来帮助我在C#中生成十进制数字的组合:

public static string GenerateCodeNumeric(int length)
{
        Random random = new Random();
        string characters = "0123456789";
        StringBuilder result = new StringBuilder(length);

        for (int i = 0; i < length; i++)
        {
            result.Append(characters[random.Next(characters.Length)]);
        }

        return result.ToString();
    }

这里的问题是这种方法有可能产生两个或更多相同的组合,是否有任何想法可以防止这种情况发生?

我有一个解决这个问题的主张:

  1. 每次我的方法生成代码时,我都会将其保存在数据库的表中,在生成此代码之前,如果该代码已经存在,我会查看此表。
  2. 但问题是,当我的表格数据繁重时,如果此代码已退出,则需要很长时间才能查看...并且会降低性能......

1 个答案:

答案 0 :(得分:2)

这对我来说,我只会增加一个计数器,这是无碰撞的绝对保证。 (如果您需要在不同的地方生成代码,请保留一些固定的数字以区分它们。)

然后,如果您需要看起来随机的代码,则以可逆方式对位进行加扰,以使不同的值保持不同。如果代码足够长,您甚至可以在任意位置插入随机的额外位。

通过这样的程序,这些值是隐含唯一的,并且不需要在事后检查。