首页 > 编程语言 >C#-傻办法获取中文姓名

C#-傻办法获取中文姓名

时间:2022-10-21 10:56:33浏览次数:65  
标签:listName 中文 string xm C# Substring Add 姓名

参考

C#姓名验证及百家姓验证,身份证格式校验

公共方法

/// <summary>
/// 打印姓名
/// </summary>
/// <param name="name">姓名字符串</param>
public static void  PringtXM(string xm) {
	//匹配姓名的正则表达式
	string pattern = "^[赵,钱,孙,李,周,吴,郑,王,冯,陈,楮,卫,蒋,沈,韩,杨,朱,秦,尤,许,何,吕,施,张,孔,曹,严,华,金,魏,陶,"
			+ "姜,戚,谢,邹,喻,柏,水,窦,章,云,苏,潘,葛,奚,范,彭,郎,鲁,韦,昌,马,苗,凤,花,方,俞,任,袁,柳,酆,鲍,史,唐,费,廉,岑,薛,雷,贺,倪,汤,滕,殷,罗,"
			+ "毕,郝,邬,安,常,乐,于,时,傅,皮,卞,齐,康,伍,余,元,卜,顾,孟,平,黄,和,穆,萧,尹,姚,邵,湛,汪,祁,毛,禹,狄,米,贝,明,臧,计,伏,成,戴,谈,宋,茅,"
			+ "庞,熊,纪,舒,屈,项,祝,董,梁,杜,阮,蓝,闽,席,季,麻,强,贾,路,娄,危,江,童,颜,郭,梅,盛,林,刁,锺,徐,丘,骆,高,夏,蔡,田,樊,胡,凌,霍,虞,万,支,"
			+ "柯,昝,管,卢,莫,经,房,裘,缪,干,解,应,宗,丁,宣,贲,邓,郁,单,杭,洪,包,诸,左,石,崔,吉,钮,龚,程,嵇,邢,滑,裴,陆,荣,翁,荀,羊,於,惠,甄,麹,家,"
			+ "封,芮,羿,储,靳,汲,邴,糜,松,井,段,富,巫,乌,焦,巴,弓,牧,隗,山,谷,车,侯,宓,蓬,全,郗,班,仰,秋,仲,伊,宫,宁,仇,栾,暴,甘,斜,厉,戎,祖,武,符,"
			+ "刘,景,詹,束,龙,叶,幸,司,韶,郜,黎,蓟,薄,印,宿,白,怀,蒲,邰,从,鄂,索,咸,籍,赖,卓,蔺,屠,蒙,池,乔,阴,郁,胥,能,苍,双,闻,莘,党,翟,谭,贡,劳,"
			+ "逄,姬,申,扶,堵,冉,宰,郦,雍,郤,璩,桑,桂,濮,牛,寿,通,边,扈,燕,冀,郏,浦,尚,农,温,别,庄,晏,柴,瞿,阎,充,慕,连,茹,习,宦,艾,鱼,容,向,古,易,"
			+ "慎,戈,廖,庾,终,暨,居,衡,步,都,耿,满,弘,匡,国,文,寇,广,禄,阙,东,欧,殳,沃,利,蔚,越,夔,隆,师,巩,厍,聂,晁,勾,敖,融,冷,訾,辛,阚,那,简,饶,"
			+ "空,曾,毋,沙,乜,养,鞠,须,丰,巢,关,蒯,相,查,后,荆,红,游,竺,权,逑,盖,益,桓,公,万俟,司马,上官,欧阳,夏侯,诸葛,闻人,东方,赫连,皇甫,尉迟,"
			+ "公羊,澹台,公冶,宗政,濮阳,淳于,单于,太叔,申屠,公孙,仲孙,轩辕,令狐,锺离,宇文,长孙,慕容,鲜于,闾丘,司徒,司空,丌官,司寇,仉,督,子车,"
			+ "颛孙,端木,巫马,公西,漆雕,乐正,壤驷,公良,拓拔,夹谷,宰父,谷梁,晋,楚,阎,法,汝,鄢,涂,钦,段干,百里,东郭,南门,呼延,归,海,羊舌,微生,岳,"
			+ "帅,缑,亢,况,后,有,琴,梁丘,左丘,东门,西门,商,牟,佘,佴,伯,赏,南宫,墨,哈,谯,笪,年,爱,阳,佟,第五,言,福][\\u4e00-\\u9fa5]{1,4}$";
	//复姓
	string fx = "万俟,司马,上官,欧阳,夏侯,诸葛,闻人,东方,赫连,皇甫,尉迟,公羊,澹台,公冶,宗政,濮阳,淳于,单于,太叔,申屠,公孙,仲孙,轩辕,令狐,锺离,宇文,长孙,慕容,鲜于,闾丘,司徒,司空,丌官,司寇,子车,颛孙,端木,巫马,公西,漆雕,乐正,壤驷,公良,拓拔,夹谷,宰父,谷梁,段干,百里,东郭,南门,呼延,羊舌,微生,梁丘,左丘,东门,西门,第五";
	Regex regex = new Regex(pattern);
	bool matches = regex.IsMatch(xm);
	//先判断字符是否为姓名
	if (!matches)
	{
		Console.WriteLine(xm + ",不是姓名。");
		return;
	}

	string x = "";
	string m = "";

	//是姓名
	//两个字的情况,第一个字肯定是姓,第二个字肯定是名
	if (xm.Length == 2)
	{
		x = xm.Substring(0, 1);
		m = xm.Substring(1, 1);
	}
	else if (xm.Length > 2)
	{
		//大于两个字的情况,可能第一个字是姓,比如李商隐。另一种情况是近几年兴起的父母姓加名的情况,比如周杨白,这种也是第一个字是姓,后面两个是名。
		//也可能前两个字是姓,比如欧阳修,欧阳慕白
		//这里不考虑其它的情况了,比如少数民族的姓名这些,这个有新的规则了
		//正常情况汉族的姓名
		//这里直接截取前两个字符,判断是否复姓,如果是,则复姓为姓,否则第一个字为姓
		x = xm.Substring(0, 2);
		if (fx.Contains(x))
		{
			m = xm.Substring(2);
		}
		else
		{
			x = xm.Substring(0, 1);
			m = xm.Substring(1);
		}
	}
	Console.WriteLine("姓名:{0},姓:{1},名:{2}", xm, x, m);
}

测试

static void Main(string[] args)
{

	#region 打印姓名
	List<string> listName = new List<string>();
	listName.Add("李商隐");
	listName.Add("欧阳修");
	listName.Add("欧豪");
	listName.Add("李白");
	listName.Add("李杜康");
	foreach (var item in listName)
	{
		PringtXM(item);
	}
	#endregion
}

输出

姓名:李商隐,姓:李,名:商隐
姓名:欧阳修,姓:欧阳,名:修
姓名:欧豪,姓:欧,名:豪
姓名:李白,姓:李,名:白
姓名:李杜康,姓:李,名:杜康

标签:listName,中文,string,xm,C#,Substring,Add,姓名
From: https://www.cnblogs.com/Luoma_HaoWei/p/16812716.html

相关文章

  • 在旧版本centos上编译c++11的程序
    runac++programwithc++11supportinolderCentOSmachine从extras安装SoftwareCollections(SCL)yuminstallcentos-release-scl-rh安装devtoolset:yumin......
  • Educational Codeforces Round 138 (Rated for Div. 2)
    比赛链接EducationalCodeforcesRound138(RatedforDiv.2)D.CountingArrays解题思路容斥原理显然\([1,1,\dots,1]\)是一组方案,直接求不好求解,考虑反面,对于......
  • 【http代理】Python-Selenium-Chrome(白名单使用)代码样例
    1.基于白名单方式使用Selenium+Chrome认证代理2.运行环境要求python2/3+selenium+Chrome+Chromedriver+Windows/Linux/macOS03.下载chromedriver(注意chromedrive......
  • spring集成的线程池ThreadPoolTaskExecutor使用2.0
    线程池的执行流程所有线程池的执行流程都相同,如下图所示线程池不同场景测试根据线程池不同参数进行测试测试service@Service@Slf4jpublicclassThreadPoolService......
  • 【C++入门】(九)使用继承拓展类
    1.什么是继承?基类(classAnimal)可以有多个派生类(classDog:publicAnimal)classAnimal//基类{public:stringname="123";intage;};​classDo......
  • NFC门禁卡模拟
    使用nfc模拟全加密门卡过程1、门禁卡大多采用IC制卡和ID制卡ID卡:内部仅存储一个卡号信息,无加密区域。由于手机、手环无法模拟该卡种,所以这里不做讨论和扩展IC卡:本身具......
  • eclipse设置JVM内存堆
     前言环境不会改变,解决之道在于改变自己。最近笔者再整理堆内存溢出方向的课程,写些杂项资料,留着自用的,有需要的看看~一、JVM内存堆参数含义-Xmx128m#最大内存设......
  • gpu/cpu类型deployment清单整理脚本
    #!/bin/bashkubectlgetdeploy-nhost|grep-v'0'|awk'{print$1}'>deploy.txtfordeployin`catdeploy.txt`docheck_gpu=`kubectldescribedepl......
  • 【C++入门】(七)高级函数
    1.如何重载成员函数?函数重载:编写多个名称相同但参数不同的函数成员函数也可以重载编译器根据参数数量和类型决定调用哪个构造函数classRectangle{public......
  • QQuick集成OSG的记录
    由于osgQt已经好多年没有维护,并且大部分的博客中关于OSG和QT的集成方式都是基于osgQOpenGLWidget来的。在使用测试过程中发现,继承osgQOpenGLWidget在与Qt的dock系统混合使......