随机字符串程序(支持数字,字母,汉字,特殊字符)
2010-07-07 21:08
671 查看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ex2
{
class Program
{
static void Main(string[] args)
{
while (true)
{
Encoding gb = Encoding.GetEncoding("gb2312");
Console.WriteLine("字符串长度:");
int length = int.Parse(Console.ReadLine());
Console.WriteLine("生成的个数:");
int number = int.Parse(Console.ReadLine());
Console.WriteLine("选择字符的范围:");
Console.WriteLine("1. 英文字母。");
Console.WriteLine("2. 数字。");
Console.WriteLine("3. 特殊字符。");
Console.WriteLine("4. 中文。");
Console.WriteLine("请输入:");
int range = int.Parse(Console.ReadLine());
if (range <= 0 || range > 5)
{
Console.WriteLine("字符的范围输入错误!!!");
}
else
{
GetRandom gr = new GetRandom();
switch (range)
{
case 1:
Console.WriteLine("生成的字符串为:");
for (int i = 0; i < number; i++)
{
string character = gr.GetCode(length, range);
Console.WriteLine(character);
}; break;
case 2:
Console.WriteLine("生成的字符串为:");
for (int i = 0; i < number; i++)
{
string character = gr.GetCode(length, range);
Console.WriteLine(character);
}; break;
case 3:
Console.WriteLine("生成的字符串为:");
for (int j = 0; j < number; j++)
{
string str = gr.CreateSpecialCode(length);
Console.WriteLine(str);
};
break;
case 4:
Console.WriteLine("生成的字符串为:");
for (int j = 0; j < number; j++)
{
object[] bytes = gr.CreateChineseCode(length);
string str = "";
// Thread.Sleep(100);
for (int i = 0; i < length; i++)
{
str = str + gb.GetString((byte[])Convert.ChangeType(bytes[i], typeof(byte[])));
}
Console.WriteLine(str);
str = "";
};
break;
}
Console.WriteLine("是否继续?(Y/N)");
string b = Console.ReadLine();
if (b.Equals("y") || b.Equals("Y"))
{
continue;
}
else
{
break;
}
}
}
}
}
class GetRandom
{
/// <summary>
/// 产生字母或数字的随机字符串,1为字母,2为数字
/// </summary>
/// <param name="length"></param>
/// <param name="range"></param>
/// <returns></returns>
public string GetCode(int length, int range)
{
string str = "";
switch (range)
{
case 1: str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; break;
case 2: str = "0123456789"; break;
}
char[] chastr = str.ToCharArray();
string code = "";
Thread.Sleep(100);
Random rd = new Random();
for (int i = 0; i < length; i++)
{
code += str.Substring(rd.Next(0, str.Length), 1);
}
return code;
}
/// <summary>
/// 产生汉字组合
/// </summary>
/// <param name="strlength"></param>
/// <returns></returns>
public object[] CreateChineseCode(int strlength)
{
string[] rBase = new String[16] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
Thread.Sleep(100);
Random rnd = new Random();
object[] bytes = new object[strlength];
for (int i = 0; i < strlength; i++)
{
//区位码第1位
int r1 = rnd.Next(11, 14);
string str_r1 = rBase[r1].Trim();
//区位码第2位
rnd = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i);//更换随机数发生器的 种子避免产生重复值
int r2;
if (r1 == 13)
{
r2 = rnd.Next(0, 7);
}
else
{
r2 = rnd.Next(0, 16);
}
string str_r2 = rBase[r2].Trim();
//区位码第3位
// Thread.Sleep(100);
rnd = new Random(r2 * unchecked((int)DateTime.Now.Ticks) + i);
int r3 = rnd.Next(10, 16);
string str_r3 = rBase[r3].Trim();
//区位码第4位
// Thread.Sleep(100);
rnd = new Random(r3 * unchecked((int)DateTime.Now.Ticks) + i);
int r4;
if (r3 == 10)
{
r4 = rnd.Next(1, 16);
}
else if (r3 == 15)
{
r4 = rnd.Next(0, 15);
}
else
{
r4 = rnd.Next(0, 16);
}
string str_r4 = rBase[r4].Trim();
//定义两个字节变量存储产生的随机汉字区位码
byte byte1 = Convert.ToByte(str_r1 + str_r2, 16);
byte byte2 = Convert.ToByte(str_r3 + str_r4, 16);
//将两个字节变量存储在字节数组中
byte[] str_r = new byte[] { byte1, byte2 };
//将产生的一个汉字的字节数组放入object数组中
bytes.SetValue(str_r, i);
}
return bytes;
}
/// <summary>
/// 产生特殊字符
/// </summary>
/// <param name="strlength"></param>
/// <returns></returns>
public string CreateSpecialCode(int strlength)
{
char[] hexChars = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
string retStr = string.Empty;
Encoding ed = Encoding.GetEncoding("GB2312");
if (ed == null) //系统不支持GB2312
{
return string.Empty;
}
for (int i = 0; i < strlength; i++)
{
//区码第一位字符:B-D
Thread.Sleep(100);
Random rnd = new Random();
int r1 = rnd.Next(10, 11);
char r11 = hexChars[r1];
//区码第二位字符:0-7
rnd = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i); //重置随机种子
int r2 = rnd.Next(1, 10);
//}
char r22 = hexChars[r2];
//位码第一位字符:A-F
rnd = new Random(r2 * unchecked((int)DateTime.Now.Ticks) + i);
int r3 = rnd.Next(10, 16);
char r33 = hexChars[r3];
//位码第二位字符:如果第一位为A则第二位不能为0,如果第一位为F则第二位不能为F
int r4 = 0;
rnd = new Random(r3 * unchecked((int)DateTime.Now.Ticks) + i);
if (r3 == 10) //A
{
r4 = rnd.Next(1, 16);
}
else if (r3 == 15) //F
{
r4 = rnd.Next(0, 15);
}
else //B-E
{
r4 = rnd.Next(0, 16);
}
char r44 = hexChars[r4];
byte b1 = Convert.ToByte(r11.ToString() + r22.ToString(), 16);
byte b2 = Convert.ToByte(r33.ToString() + r44.ToString(), 16);
byte[] bytes = new byte[] { b1, b2 };
retStr += ed.GetString(bytes);
}
return retStr;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ex2
{
class Program
{
static void Main(string[] args)
{
while (true)
{
Encoding gb = Encoding.GetEncoding("gb2312");
Console.WriteLine("字符串长度:");
int length = int.Parse(Console.ReadLine());
Console.WriteLine("生成的个数:");
int number = int.Parse(Console.ReadLine());
Console.WriteLine("选择字符的范围:");
Console.WriteLine("1. 英文字母。");
Console.WriteLine("2. 数字。");
Console.WriteLine("3. 特殊字符。");
Console.WriteLine("4. 中文。");
Console.WriteLine("请输入:");
int range = int.Parse(Console.ReadLine());
if (range <= 0 || range > 5)
{
Console.WriteLine("字符的范围输入错误!!!");
}
else
{
GetRandom gr = new GetRandom();
switch (range)
{
case 1:
Console.WriteLine("生成的字符串为:");
for (int i = 0; i < number; i++)
{
string character = gr.GetCode(length, range);
Console.WriteLine(character);
}; break;
case 2:
Console.WriteLine("生成的字符串为:");
for (int i = 0; i < number; i++)
{
string character = gr.GetCode(length, range);
Console.WriteLine(character);
}; break;
case 3:
Console.WriteLine("生成的字符串为:");
for (int j = 0; j < number; j++)
{
string str = gr.CreateSpecialCode(length);
Console.WriteLine(str);
};
break;
case 4:
Console.WriteLine("生成的字符串为:");
for (int j = 0; j < number; j++)
{
object[] bytes = gr.CreateChineseCode(length);
string str = "";
// Thread.Sleep(100);
for (int i = 0; i < length; i++)
{
str = str + gb.GetString((byte[])Convert.ChangeType(bytes[i], typeof(byte[])));
}
Console.WriteLine(str);
str = "";
};
break;
}
Console.WriteLine("是否继续?(Y/N)");
string b = Console.ReadLine();
if (b.Equals("y") || b.Equals("Y"))
{
continue;
}
else
{
break;
}
}
}
}
}
class GetRandom
{
/// <summary>
/// 产生字母或数字的随机字符串,1为字母,2为数字
/// </summary>
/// <param name="length"></param>
/// <param name="range"></param>
/// <returns></returns>
public string GetCode(int length, int range)
{
string str = "";
switch (range)
{
case 1: str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; break;
case 2: str = "0123456789"; break;
}
char[] chastr = str.ToCharArray();
string code = "";
Thread.Sleep(100);
Random rd = new Random();
for (int i = 0; i < length; i++)
{
code += str.Substring(rd.Next(0, str.Length), 1);
}
return code;
}
/// <summary>
/// 产生汉字组合
/// </summary>
/// <param name="strlength"></param>
/// <returns></returns>
public object[] CreateChineseCode(int strlength)
{
string[] rBase = new String[16] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
Thread.Sleep(100);
Random rnd = new Random();
object[] bytes = new object[strlength];
for (int i = 0; i < strlength; i++)
{
//区位码第1位
int r1 = rnd.Next(11, 14);
string str_r1 = rBase[r1].Trim();
//区位码第2位
rnd = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i);//更换随机数发生器的 种子避免产生重复值
int r2;
if (r1 == 13)
{
r2 = rnd.Next(0, 7);
}
else
{
r2 = rnd.Next(0, 16);
}
string str_r2 = rBase[r2].Trim();
//区位码第3位
// Thread.Sleep(100);
rnd = new Random(r2 * unchecked((int)DateTime.Now.Ticks) + i);
int r3 = rnd.Next(10, 16);
string str_r3 = rBase[r3].Trim();
//区位码第4位
// Thread.Sleep(100);
rnd = new Random(r3 * unchecked((int)DateTime.Now.Ticks) + i);
int r4;
if (r3 == 10)
{
r4 = rnd.Next(1, 16);
}
else if (r3 == 15)
{
r4 = rnd.Next(0, 15);
}
else
{
r4 = rnd.Next(0, 16);
}
string str_r4 = rBase[r4].Trim();
//定义两个字节变量存储产生的随机汉字区位码
byte byte1 = Convert.ToByte(str_r1 + str_r2, 16);
byte byte2 = Convert.ToByte(str_r3 + str_r4, 16);
//将两个字节变量存储在字节数组中
byte[] str_r = new byte[] { byte1, byte2 };
//将产生的一个汉字的字节数组放入object数组中
bytes.SetValue(str_r, i);
}
return bytes;
}
/// <summary>
/// 产生特殊字符
/// </summary>
/// <param name="strlength"></param>
/// <returns></returns>
public string CreateSpecialCode(int strlength)
{
char[] hexChars = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
string retStr = string.Empty;
Encoding ed = Encoding.GetEncoding("GB2312");
if (ed == null) //系统不支持GB2312
{
return string.Empty;
}
for (int i = 0; i < strlength; i++)
{
//区码第一位字符:B-D
Thread.Sleep(100);
Random rnd = new Random();
int r1 = rnd.Next(10, 11);
char r11 = hexChars[r1];
//区码第二位字符:0-7
rnd = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i); //重置随机种子
int r2 = rnd.Next(1, 10);
//}
char r22 = hexChars[r2];
//位码第一位字符:A-F
rnd = new Random(r2 * unchecked((int)DateTime.Now.Ticks) + i);
int r3 = rnd.Next(10, 16);
char r33 = hexChars[r3];
//位码第二位字符:如果第一位为A则第二位不能为0,如果第一位为F则第二位不能为F
int r4 = 0;
rnd = new Random(r3 * unchecked((int)DateTime.Now.Ticks) + i);
if (r3 == 10) //A
{
r4 = rnd.Next(1, 16);
}
else if (r3 == 15) //F
{
r4 = rnd.Next(0, 15);
}
else //B-E
{
r4 = rnd.Next(0, 16);
}
char r44 = hexChars[r4];
byte b1 = Convert.ToByte(r11.ToString() + r22.ToString(), 16);
byte b2 = Convert.ToByte(r33.ToString() + r44.ToString(), 16);
byte[] bytes = new byte[] { b1, b2 };
retStr += ed.GetString(bytes);
}
return retStr;
}
}
}
相关文章推荐
- Java随机生成长度不少于6的指定长度的密码,且这个字符串必须包含大小写字母、数字和特殊字符,四种的任意三种
- 随机产生由特殊字符,大小写字母以及数字组成的字符串,且每种字符都至少出现一次
- Java随机密码生成器,Java随机生成长度不少于6的指定长度的密码,且这个字符串必须包含大小写字母、数字和特殊字符,四种的任意三种
- js生成随机字符串(数字,字母,特殊字符)
- 求中英文混合字符串长度,中英文混合字符串截取(汉字2个字节,字母数字等1个字节),字符转ASCII码,ASCII码转字符
- 通过程序统计字符串的大写字母个数、小写字母个数、数字个数和其它字符个数。用函数func实现功能
- 字符串要求字母、数字、特殊字符,至少有两项。正则表达式不好写,可以用这个方法实现。
- 华为计算字符个数写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
- js判断输入字符串长度(汉字算两个字符,字母数字算一个)
- JS判断输入字符串长度(汉字算两个字符,字母数字算一个)
- 写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
- JavaScript 中怎样判断文本框只能输出英文字母、汉字和数字,不能输入特殊字符!
- js脚本系列(1) JS判断输入字符串长度(汉字算两个字符,字母数字算一个)
- php 字符串拼音首字母(支持数字,英文,常用汉字)
- 串的处理 在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下: 1. 把每个单词的首字母变为大写。 2. 把数字与字母之间用下划线字符(_)分
- JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
- JS判断输入字符串长度(汉字算两个字符,字母数字算一个)
- 替换除汉字字母数字和指定的字符或特殊符号外的所有内容的正则表达式
- 华为2写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
- 对字符串中是否包含特殊字符,是否是空格或换行, 以及字数的限制(汉字和字母)