RandomHelper.cs(20170223)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace System.CRM.Common
{
    /// <summary>
    /// 随机方法助手类类
    /// </summary>
    public class RandomHelper
    {

        /// <summary>
        /// 随机种子,定义全局,以防循环随机时出现相同
        /// </summary>
        private static Random ran = new Random();

        #region 私有字段/方法

        /// <summary>
        /// 数字 0-9 集合
        /// </summary>
        private static List<char> number = new List<char> { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
        /// <summary>
        /// 字母 A-Z 集合
        /// </summary>
        private static List<char> upperen = new List<char> { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
        /// <summary>
        /// 字母 a-z 集合
        /// </summary>
        private static List<char> loweren = new List<char> { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
        /// <summary>
        /// 常见符号集合
        /// </summary>
        private static List<char> sign = new List<char> { '~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '+', '=', '[', ']', '\\', '{', '}', '|', ';', ':', '\'', '"', '<', '>', '/', ',', '.', '?' };
        /// <summary>
        /// 生成随机字符串
        /// </summary>
        /// <param name="arr"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        private static string RandomString(List<char> arr, int length)
        {
            string result = "";


            for (int i = 0; i < length; i++)
            {
                int index = ran.Next(0, arr.Count);
                result += arr[index];
            }

            return result;
        }

        #endregion

        #region 公共方法

        /// <summary>
        /// 获得随机 数字 字符串
        /// </summary>
        /// <param name="length">希望得到的字符串长度</param>
        /// <returns>随机字符串</returns>
        public static string Number(int length)
        {
            List<char> arr = new List<char>();
            arr.AddRange(number);

            return RandomString(arr, length);
        }
        /// <summary>
        /// 获得随机 数字和小写英文字母 字符串
        /// </summary>
        /// <param name="length">希望得到的字符串长度</param>
        /// <returns>随机字符串</returns>
        public static string LowerEnNumbe(int length)
        {
            List<char> arr = new List<char>();
            arr.AddRange(number);
            arr.AddRange(loweren);

            return RandomString(arr, length);
        }
        /// <summary>
        /// 获得随机 数字和大写英文字母 字符串
        /// </summary>
        /// <param name="length">希望得到的字符串长度</param>
        /// <returns>随机字符串</returns>
        public static string UpperEnNumber(int length)
        {
            List<char> arr = new List<char>();
            arr.AddRange(number);
            arr.AddRange(upperen);

            return RandomString(arr, length);
        }
        /// <summary>
        /// 获得随机 数字和英文字母 字符串
        /// </summary>
        /// <param name="length">希望得到的字符串长度</param>
        /// <returns>随机字符串</returns>
        public static string EnglishNumbe(int length)
        {
            List<char> arr = new List<char>();
            arr.AddRange(number);
            arr.AddRange(upperen);
            arr.AddRange(loweren);

            return RandomString(arr, length);
        }
        /// <summary>
        /// 获得随机 小写英文字母 字符串
        /// </summary>
        /// <param name="length">希望得到的字符串长度</param>
        /// <returns>随机字符串</returns>
        public static string LowerEn(int length)
        {
            List<char> arr = new List<char>();
            arr.AddRange(loweren);

            return RandomString(arr, length);
        }
        /// <summary>
        /// 获得随机 大写英文字母 字符串
        /// </summary>
        /// <param name="length">希望得到的字符串长度</param>
        /// <returns>随机字符串</returns>
        public static string UpperEn(int length)
        {
            List<char> arr = new List<char>();
            arr.AddRange(upperen);

            return RandomString(arr, length);
        }
        /// <summary>
        /// 获得随机 英文字母 字符串
        /// </summary>
        /// <param name="length">希望得到的字符串长度</param>
        /// <returns>随机字符串</returns>
        public static string English(int length)
        {
            List<char> arr = new List<char>();
            arr.AddRange(upperen);
            arr.AddRange(loweren);

            return RandomString(arr, length);
        }
        /// <summary>
        /// 获得随机 汉字 字符串
        /// </summary>
        /// <param name="length">希望得到的字符串长度</param>
        /// <returns>随机字符串</returns>
        public static string Chinese(int length)
        {
            string result = "";
            Encoding gb = Encoding.GetEncoding("gb2312");

            for (int i = 0; i < length; i++)
            {
                // 获取区码(常用汉字的区码范围为16-55)  
                int regionCode = ran.Next(16, 56);
                // 获取位码(位码范围为1-94 由于55区的90,91,92,93,94为空,故将其排除)  
                int positionCode;
                if (regionCode == 55)
                {
                    // 55区排除90,91,92,93,94  
                    positionCode = ran.Next(1, 90);
                }
                else
                {
                    positionCode = ran.Next(1, 95);
                }

                // 转换区位码为机内码  
                int regionCode_Machine = regionCode + 160;// 160即为十六进制的20H+80H=A0H  
                int positionCode_Machine = positionCode + 160;// 160即为十六进制的20H+80H=A0H  

                // 转换为汉字  
                byte[] bytes = new byte[] { (byte)regionCode_Machine, (byte)positionCode_Machine };
                result += gb.GetString(bytes);
            }

            return result;
        }

        #endregion

        #region 百家姓

        /// <summary>
        /// 随机百家姓
        /// </summary>
        /// <param name="Compound">是否需要复姓(true需要,false不需要)</param>
        /// <returns></returns>
        public static string Surname(bool Compound)
        {


            string[] SurnameArr = { "","","","","","","","","","","","","","","","","","","","","","","","","","",
                               "","","","","","","","","","","","","","","","","","","","","","", "","","","",
                               "","","","","","","","","","","","","","","","","","","","","","",
  "","","","","","","","","","","","","","","","","","","","","","","",
  "","","","","","","","","","","","","","","","","","","","","","","","","","",
  "","","","","","","","","","","","","","","","","","","","","","","","","***","",
  "","","","","","","","","","","","","","","","","","","","","","","","","","",
  "","","","","","","","","","","","","","","","","","","","","","","","","","",
  "","","","","","","","","羿","","","","","","","","","","","","","","","","","",
  "","","","","","","","","","","","","","","","","","","","","","","","","","",
  "","","","","","","","","","","","","宿","","怀","","","","","","","","","","","",
  "","","","","","","","","","","","","","","","","","","","","","","","","","",
  "","","","","","寿","","","","","","","","","","","","","","","","","","","","",
  "","","","","","","","","","","","","","","","","","","","","","","","","广","",
  "","","","","","","","","","","","","","","","","","","","","","","","","","",
  "","","","","","","","","","","","","","","","","","","","","","","","","","",
  "","","","","","","","","","","","","","","","","","","","","","","","","","",
  "","","","","","","","","","","","","","","","","","","","","","","","","","",
  "","","","","","","","","","","","","","","","","","","","","","","","","","",
  "","","","","","","","","","","","","","","","","","","","","","","","","","",
  "","","","","万俟","司马","上官","欧阳","夏侯","诸葛","闻人","东方","赫连","皇甫","羊舌","尉迟","公羊","澹台","公冶","宗正",
  "濮阳","淳于","单于","太叔","申屠","公孙","仲孙","轩辕","令狐","钟离","宇文","长孙","慕容","鲜于","闾丘","司徒","司空","兀官","司寇",
  "南门","呼延","子车","颛孙","端木","巫马","公西","漆雕","车正","壤驷","公良","拓跋","夹谷","宰父","谷梁","段干","百里","东郭","微生",
  "梁丘","左丘","东门","西门","南宫","第五","公仪","公乘","太史","仲长","叔孙","屈突","尔朱","东乡","相里","胡母","司城","张廖","雍门",
  "毋丘","贺兰","綦毋","屋庐","独孤","南郭","北宫","王孙"};




            int index = 0;
            string result = null;
            if (Compound)
            {
                //有复姓
                index = ran.Next(0, SurnameArr.Length);
            }
            else
            {
                //没有复姓
                index = ran.Next(0, 518);
            }

            result = SurnameArr[index];
            return result;
        }


        /// <summary>
        /// 随机常见姓氏
        /// </summary>
        /// <returns></returns>
        public static string SurnameMany()
        {
            string[] SurnameArr = { "","","","","","","","","","","","","","","","","","","","",
                               "","","","","","","","", "","","","","","","",
                               "","","","","","","","","","","","","","","","","","","","","","","","",};


            int index = 0;
            string result = null;
            index = ran.Next(0, SurnameArr.Length);
            result = SurnameArr[index];
            return result;
        }

        #endregion

        #region 城市
        /// <summary>
        /// 随机2015年中国60强城市名单
        /// 三线城市及以上
        /// </summary>
        /// <returns></returns>
        public static string City()
        {

            string[] arr = { "上海", "北京", "广州", "深圳", "成都", "重庆", "杭州", "南京", "沈阳", "苏州", "天津", "武汉", "西安",
                           "长沙","大连","济南","宁波","青岛","无锡","厦门","郑州","长春","常州","哈尔滨","福州","昆明","合肥","东莞",
                           "石家庄","呼和浩特","南昌","温州","佛山","贵阳","南宁"
                           };
            string result = null;

            int index = ran.Next(0, arr.Length);
            result = arr[index];
            return result;

        }

        /// <summary>
        /// 随机生成数字
        /// 取下不取上
        /// </summary>
        /// <param name="begin">从几开始</param>
        /// <param name="end">到几结束,不包含此数字</param>
        /// <returns></returns>
        public static int Number(int begin, int end)
        {

            return ran.Next(begin, end);
        }


        #endregion
    }
}

 

posted @ 2017-02-23 22:40  妖狐鬼魅  阅读(243)  评论(0编辑  收藏  举报