【问题标题】:A good way to check a chars 'integrity'检查字符“完整性”的好方法
【发布时间】:2011-05-02 05:47:16
【问题描述】:

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

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

Random Rand = new Random();

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

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

【问题讨论】:

标签: c#


【解决方案1】:

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

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


一个例子,根据要求:

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

【讨论】:

    【解决方案2】:

    您可以检查是否:

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

    【讨论】:

    • Oded 的答案更好,因为它使用内置结构
    • 另外,谢谢你的分享,他的答案可能会更好,我会试试的。
    【解决方案3】:

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

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

    "0123456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    

    注意删除的小写“l”(看起来像 1)。您应该删除任何其他内容,例如 0 与 '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();
        }
    }
    

    【讨论】:

    • 很抱歉没有尽快查看您的答案,在尝试了不同的方法后我可以看到并发症。如果您可以给我看一个示例,我会考虑将答案更改为您的。
    【解决方案4】:

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

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

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

    【讨论】:

    • 我这样做主要是为了好玩;但如果不是为了好玩,我为什么不呢?
    猜你喜欢
    • 2014-11-12
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2010-11-12
    • 2018-10-13
    • 2011-07-16
    相关资源
    最近更新 更多