随机字符串程序(支持数字,字母,汉字,特殊字符)

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;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值