生成随机中文姓名的辅助类(ChineseName.cs)

数据测试中会用到大量姓名,为了简化操作,写了个姓名自动生成类,这个类仅仅用于测试数据,因为生成的姓名毫无意义,甚至可笑的。

  • 首先,采用String.Splite(‘,’);函数将百家姓分开,随机生成姓名。
  • 然后,采用下面的函数随机生成1~2个简体汉字(这个函数是从园子里找到的,详见生成简体汉字C#)。
private static string FisrtName()
        {
            string str = "";
            int count = rnd.Next(1, 3);
            for (int i = 0; i < count; i++)
            {
                while (true)
                {
                    int ACode = 1601 + rnd.Next(999);
                    string strtemp = Encoding.Default.GetString(new byte[] { (byte)(ACode / 100 + 160), (byte)(ACode % 100 + 160) });
                    if (strtemp != "?")
                    {
                        str += strtemp;
                        break;
                    }
                }

            }
            return str;
        }
  • 最后一步,上完整代码:

 

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

namespace MyTool.DataConvert
{
    /// <summary>
    /// 随机生成姓名
    /// </summary>
  public  class ChineseName
    {
        private static string surname = @"
赵,钱,孙,李,周,吴,郑,王,冯,陈,褚,卫,蒋,沈,韩,杨,朱,秦,尤,许,何,吕,施,张,孔,曹,严,华,金,魏,陶,姜,
戚,谢,邹,喻,柏,水,窦,章,云,苏,潘,葛,奚,范,彭,郎,鲁,韦,昌,马,苗,凤,花,方,俞,任,袁,柳,丰,鲍,史,唐,
费,廉,岑,薛,雷,贺,倪,汤,滕,殷,罗,毕,郝,邬,安,常,乐,于,时,傅,皮,卞,齐,康,伍,余,元,卜,顾,孟,平,黄,
和,穆,萧,尹,姚,邵,湛,汪,祁,毛,禹,狄,米,贝,明,臧,计,伏,成,戴,谈,宋,茅,庞,熊,纪,舒,屈,项,祝,董,梁,
杜,阮,蓝,闵,席,季,麻,强,贾,路,娄,危,江,童,颜,郭,梅,盛,林,刁,钟,徐,丘,骆,高,夏,蔡,田,樊,胡,凌,霍,
虞,万,支,柯,昝,管,卢,莫,经,房,裘,缪,干,解,应,宗,丁,宣,贲,邓,郁,单,杭,洪,包,诸,左,石,崔,吉,钮,龚,
程,嵇,邢,滑,裴,陆,荣,翁,荀,羊,於,惠,甄,麴,家,封,芮,羿,储,靳,汲,邴,糜,松,井,段,富,巫,乌,焦,巴,弓,
牧,隗,山,谷,车,侯,宓,蓬,全,郗,班,仰,秋,仲,伊,宫,宁,仇,栾,暴,甘,钭,厉,戌,祖,武,符,刘,景,詹,束,龙,
叶,幸,司,韶,郜,黎,蓟,薄,印,宿,白,怀,蒲,邰,从,鄂,索,咸,籍,赖,卓,蔺,屠,蒙,池,乔,阴,郁,胥,能,苍,双,
闻,莘,党,翟,谭,贡,劳,逢,姬,申,扶,堵,冉,宰,郦,雍,郤,璩,桑,桂,濮,牛,寿,通,边,扈,燕,冀,郏,浦,尚,农,
温,别,庄,晏,柴,瞿,阎,充,慕,连,茹,习,宦,艾,鱼,容,向,古,易,慎,戈,廖,庾,终,暨,居,衡,步,都,耿,满,弘,
匡,国,文,寇,广,禄,阙,东,欧,殳,沃,利,蔚,越,菱,隆,师,巩,厍,聂,晃,勾,敖,融,冷,訾,辛,阚,那,简,饶,空,
曾,毋,沙,乜,养,鞠,须,丰,巢,关,蒯,相,查,后,荆,红,游,竺,权,逯,盖,益,桓,公,
万俟,司马,上官,欧阳,夏侯,诸葛,闻人,东方,赫连,皇甫,尉迟,公羊,澹台,公冶,宗政,濮阳,淳于,单于,太叔,
申屠,公孙,仲孙,轩辕,令狐,钟离,宇文,长孙,慕容,司徒,司空";

       static Random rnd = new Random((int)DateTime.Now.ToFileTimeUtc());

      
        private static string FisrtName()
        {
            string str = "";
            int count = rnd.Next(1, 3);
            for (int i = 0; i < count; i++)
            {
                while (true)
                {
                    int ACode = 1601 + rnd.Next(999);
                    string strtemp = Encoding.Default.GetString(new byte[] { (byte)(ACode / 100 + 160), (byte)(ACode % 100 + 160) });
                    if (strtemp != "?")
                    {
                        str += strtemp;
                        break;
                    }
                }

            }
            return str;
        }

      /// <summary>
      /// 获取随机姓名
      /// </summary>
      /// <returns></returns>
        public static string getRandomName()
        {
            surname = surname.Replace("\r\n", "");
            string name = "";
            string[] LastName = surname.Split(',');
            name = LastName[rnd.Next(0, LastName.Length)];
            name += FisrtName();
            return name;
        }
    }
}

 

理论上说,代码最好能让用户自己预定义一部分“名”,这样生成的名字才能更符合客户自己的需要,这个扩展很简单,就不在添加了。懒懒懒~~

posted @ 2012-09-13 01:28 蜗牛往前走 阅读(...) 评论(...) 编辑 收藏