我在C#中的随机密钥生成器,是应该产生如下格式的关键:C#代码生成器,元音没有显示出来
辅音+元音+辅音+元音+四个数字组合
因此,例如它可能是BABA1234或ZUZU9876。
但是,目前,虽然其他一切都显示,但是我最终得到的输出类似B_B_1234,例如下划线代表空格或无法识别的字符框。
我一直在寻找一些例子,如this,this和this,但我还没有得到它的工作。 C#代码如下:
public static string shortText()
{
string randomNumber = new Random().Next(1000, 9999).ToString();
char c1 = consonant();
char c2 = vowel();
System.Threading.Thread.Sleep(400);
char c3 = consonant();
char c4 = vowel();
return string.Format("{0}{1}{2}{3}{4}", c1, c2, c3, c4, randomNumber);
}
private static char vowel()
{
int selected = new Random().Next(0, 4);
List<int> list = new List<int> { 65, 69, 73, 79, 85 };
return Strings.Chr(selected);
}
private static char consonant()
{
int selected = new Random().Next(65, 90);
List<int> list = new List<int> { 65, 69, 73, 79, 85 };
if (list.Contains(selected) == false)
{
return Strings.Chr(selected);
}
else {
return Strings.Chr(selected + 1);
}
}
另外一个值得注意的是,此代码最初用VB写的(这就是为什么有在C#代码Strings.Chr上面,我加入到VB库的引用),它在那里正常工作,并根据开始时的格式生成代码。我将它转换为C#并稍微编辑以删除错误,但看起来转换并不完美。这里是VB代码:
Public Class Form1
Private Sub btnGenerateKey_Click(sender As Object, e As EventArgs) Handles btnGenerateKey.Click
txtKey.Text = shortText()
End Sub
Private Shared Function shortText() As String
Dim randomNumber As String = New Random().Next(1000, 9999).ToString
Dim c1 As Char = consonant()
Dim c2 As Char = vowel()
System.Threading.Thread.Sleep(400)
Dim c3 As Char = consonant()
Dim c4 As Char = vowel()
Return String.Format("{0}{1}{2}{3}{4}", c1, c2, c3, c4, randomNumber)
End Function
Private Shared Function vowel() As Char
Dim list As List(Of Integer) = New List(Of Integer)({65, 69, 73, 79, 85})
Return Chr(list(New Random().Next(0, 4)))
End Function
Private Shared Function consonant() As Char
Dim selected As Integer = New Random().Next(65, 90)
Dim list As List(Of Integer) = New List(Of Integer)({65, 69, 73, 79, 85})
If list.Contains(selected) = False Then
Return Chr(selected)
Else
Return Chr(selected + 1)
End If
End Function
End Class
任何帮助,非常感谢。
只是一个小的事情:'s_Random.Next(1000,9999)'将永远不会返回它只会不断上升到9998 Next'的'第二个参数的值9999。是_exclusive_上限。 –
@Chris Dunawa:谢谢!你说得很对:我应该*不复制并粘贴问题中的片段。 –