繁体   English   中英

检查字符“完整性”的好方法

[英]A good way to check a chars 'integrity'

我正在制作自己的密码生成器; 我希望它创建包含数字、小写字母和大写字母的密码。

我正在使用 Visual Studio 在 C# 中编写程序。
假设我使用下面的代码:

Random Rand = new Random();

Char C = Convert.ToChar(Rand.Next(0x30, 0x5A));

如何让我的程序检查 (C) 是否等于数字或大写字母?

使用Char.IsDigit (用于十进制数字)或Char.IsNumberChar.IsUpper

这些都是在Char结构上定义的 static 方法。


一个例子,根据要求:

if(Char.IsNumber(C))
{
  // Character is marked as a unicode number
}

您可以检查是否:

int ordinal = (int)C;
if(( ordinal >= 65 && ordinal <= 90 ) || (ordinal >= 48 && ordinal <= 57))
{
Console.WriteLine( C + " is an uppercase A-Z or 0-9!" );
}

可能只使用 Char.IsNumber 和 Char.IsUpper 方法:参见: http://msdn.microsoft.com/en-us/library/9s91f3by.aspx http://msdn.microsoft.com/en-us/library/yk2b3 .aspx

if (C.IsNumber || C.IsUpper) { // 密码! }

(不要编写自己的密码生成器,除非只是为了好玩)。

更好(和标准)的方法是创建一个允许字符的“字母”字符串,然后在字符串中生成一个随机索引,select 是一个允许的字符。

比首先生成一个随机字符然后检查它是否允许要好得多。

"0123456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

请注意删除的小写“l”(看起来像 1)。 您应该删除任何其他内容,例如零与“O”可能...或您的密码规则允许的任何内容)

以下是使用此技术生成随机字符串的示例:

public static class RandomUtils
{
    private static readonly Random random = new Random();

    public static string GenerateRandomAlphaNumericString(int length)
    {
        const string alpha = 
            "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

        return GenerateRandomString(length, alpha);
    }

    public static string GenerateRandomString(int length, string alphabet)
    {
        int maxlen = alphabet.Length;

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < length; i++)
        {
            sb.Append(alphabet[random.Next(0, maxlen)]);
        }

        return sb.ToString();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM