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

本文关键字:组合 确保 副本 十进制 一个 aleatoire | 更新日期: 2023-09-27 18:00:05

我写了以下方法来帮助我在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. 每次我的方法生成代码时,我都会将其存储在数据库中的一个表中,在生成此代码之前,我会查看该表中是否已经存在该代码

但这里的问题是,当我的表中有大量数据时,如果该代码已经退出,则需要很长时间来查看。。。它会降低性能。。。

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

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

然后,如果你需要代码看起来是随机的,可以以可逆的方式对比特进行加扰,使不同的值保持不同。如果代码足够长,你甚至可以在你喜欢的地方插入随机的额外比特。

通过这样的过程,值是隐式唯一的,不需要事后检查。