首页 > 解决方案 > 如何创建具有一定数量数字的随机字符串?

问题描述

我想创建一个函数,允许我生成具有某些条件的随机字符串,例如最多 2 位数字等。

到目前为止,我已经找到了这个,但我不知道如何使它最多两位数:

public static string Generate(int size)
        {
            const string chars = "abcdefghijklmnopqrstuvwxzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            var random = new Random();
            return new string(Enumerable.Repeat(chars, size).Select(s => s[random.Next(s.Length)]).ToArray());
        }

标签: c#random

解决方案


您可以对类别“digit”、“lowerCase”和“upperCase”进行硬编码,并跟踪您已经添加到生成的字符串中的数量:

public static string Generate(int size, int? maxDigits = null, int? maxLowerCase = null, int? maxUpperCase= null)
{
    if (maxDigits.HasValue && maxLowerCase.HasValue && maxUpperCase.HasValue && maxDigits + maxLowerCase + maxUpperCase< size)
    {
        throw new ArgumentOutOfRangeException($"Can't generate a string of length {size} with the given limits");
    }

    const string chars = "abcdefghijklmnopqrstuvwxzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

    var passwordBuilder = new StringBuilder();

    var random = new Random();

    int digitCount = 0, lowerCaseCount = 0, upperCaseCount = 0;

    while (passwordBuilder.Length < size)
    {
        var nextCharacter = chars[random.Next(chars.Length)];

        if (char.IsDigit(nextCharacter) && (!maxDigits.HasValue || digitCount < maxDigits))
        {
            passwordBuilder.Append(nextCharacter);
            digitCount++;
        }
        if (char.IsLower(nextCharacter) && (!maxLowerCase.HasValue || lowerCaseCount < maxLowerCase))
        {
            passwordBuilder.Append(nextCharacter);
            lowerCaseCount++;
        }
        if (char.IsUpper(nextCharacter) && (!maxUpperCase.HasValue || upperCaseCount < maxUpperCase))
        {
            passwordBuilder.Append(nextCharacter);
            upperCaseCount++;
        }
    }

    return passwordBuilder.ToString();
}

像这样使用:

var password = Generate(10, maxDigits: 2);

推荐阅读