forked from luyan/epmet-cloud-lingshan
4 changed files with 213 additions and 9 deletions
@ -0,0 +1,89 @@ |
|||
package com.epmet.commons.tools.utils; |
|||
|
|||
import com.epmet.commons.tools.constant.NumConstant; |
|||
|
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* @Description |
|||
* @Author zhaoqifeng |
|||
* @Date 2022/9/14 14:40 |
|||
*/ |
|||
public class NameUtils { |
|||
/** |
|||
* 复姓(两字),国内现存81个。末尾添加三字以上的部分满姓 |
|||
*/ |
|||
private static final String[] SURNAME_NOW = {"百里", "北堂", "北野", "北宫", "辟闾", "孛尔", "淳于", "成公", "陈生", "褚师", |
|||
"端木", "东方", "东郭", "东野", "东门", "第五", "大狐", "段干", "段阳", "带曰", "第二", "东宫", "公孙", "公冶", "公羊", |
|||
"公良", "公西", "公孟", "高堂", "高阳", "公析", "公肩", "公坚", "郭公", "谷梁", "毌将", "公乘", "毌丘", "公户", "公广", |
|||
"公仪", "公祖", "皇甫", "黄龙", "胡母", "何阳", "夹谷", "九方", "即墨", "梁丘", "闾丘", "洛阳", "陵尹", "冷富", "龙丘", |
|||
"令狐", "林彭", "南宫", "南郭", "女娲", "南伯", "南容", "南门", "南野", "欧阳", "欧侯", "濮阳", "青阳", "漆雕", "亓官", |
|||
"渠丘", "壤驷", "上官", "少室", "少叔", "司徒", "司马", "司空", "司寇", "士孙", "申屠", "申徒", "申鲜", "申叔", "夙沙", |
|||
"叔先", "叔仲", "侍其", "叔孙", "澹台", "太史", "太叔", "太公", "屠岸", "唐古", "闻人", "巫马", "微生", "王孙", "无庸", |
|||
"夏侯", "西门", "信平", "鲜于", "轩辕", "相里", "新垣", "徐离", "羊舌", "羊角", "延陵", "於陵", "伊祁", "吾丘", "乐正", |
|||
"只斤", "诸葛", "颛孙", "仲孙", "仲长", "钟离", "宗政", "主父", "中叔", "左人", "左丘", "宰父", "长儿", "仉督", "单于", |
|||
"叱干", "叱利", "车非", "车公", "车侯", "车长", "车绵", "独孤", "大野", "独吉", "达奚", "达官", "达仲", "达品", "哥舒", |
|||
"哥夜", "哥翰", "哥汗", "赫连", "呼延", "贺兰", "黑齿", "斛律", "斛粟", "贺若", "贺奴", "贺远", "贺元", "夹谷", "吉胡", |
|||
"吉利", "吉家", "可频", "慕容", "万俟", "万红", "万中", "抹捻", "纳兰", "纳西", "纳吉", "纳罕", "纳塞", "纳博", "纳称", |
|||
"纳勉", "普周", "仆固", "仆散", "蒲察", "屈突", "屈卢", "钳耳", "是云", "索卢", "厍狄", "拓跋", "同蹄", "秃发", "完颜", |
|||
"完明", "完忠", "宇文", "尉迟", "耶律", "耶红", "也先", "耶鲜", "耶闻", "长孙", "长南", "长北", "长西", "长红", "长元", |
|||
"长秋", "长寸", "长李", "长云", "萨嘛喇","赫舍里","萨克达","钮祜禄","他塔喇","喜塔腊","库雅喇","瓜尔佳","舒穆禄","索绰络", |
|||
"叶赫那拉","依尔觉罗","额尔德特","讷殷富察","叶赫那兰","爱新觉罗","依尔根觉罗"}; |
|||
|
|||
/** |
|||
* 获取复姓,非单字姓氏。未匹配上则依旧返回单字姓氏 |
|||
* @param name |
|||
* @return |
|||
*/ |
|||
public static String getSurNameComplex(String name){ |
|||
for (String s : SURNAME_NOW) { |
|||
if (name.startsWith(s)) { |
|||
return name.substring(0, s.length()); |
|||
} |
|||
} |
|||
return name.substring(0,1); |
|||
} |
|||
|
|||
/** |
|||
* 获取复姓名,去除姓氏后名 |
|||
* @param name |
|||
* @return |
|||
*/ |
|||
public static String getNameComplex(String name){ |
|||
for (String s : SURNAME_NOW) { |
|||
if (name.startsWith(s)) { |
|||
return name.substring(s.length()); |
|||
} |
|||
} |
|||
return name.substring(1); |
|||
} |
|||
|
|||
/** |
|||
* 获取姓氏与姓名<br> |
|||
* 姓名在两字时,首字为姓。<br> |
|||
* 姓名大于两字时,优先匹配复姓。<br> |
|||
* 姓氏未匹配且姓名多于5字时,姓与名均在姓氏中,名为空;少于5字时则采用第一个字为姓。<br> |
|||
* @param name 姓名 |
|||
* @return map类型数据,姓氏为key值“X”,名字为value值“M” |
|||
*/ |
|||
public static Map<String, String> getSurName(String name) { |
|||
Map<String,String> mapData = new HashMap<>(NumConstant.TWO); |
|||
if (name.length() > NumConstant.ZERO && name.length() <= NumConstant.TWO){ |
|||
mapData.put("X", name.substring(NumConstant.ZERO, NumConstant.ONE)); |
|||
mapData.put("M", name.substring(NumConstant.ONE)); |
|||
} else if (name.length() > NumConstant.TWO) { |
|||
for (String s : SURNAME_NOW) {//遍历复姓数组
|
|||
if (name.startsWith(s)) { |
|||
mapData.put("X", s); |
|||
mapData.put("M", name.substring(s.length())); |
|||
return mapData; |
|||
} |
|||
} |
|||
//姓氏没有匹配时采用第一个字为姓
|
|||
mapData.put("X", name.substring(NumConstant.ZERO, NumConstant.ONE)); |
|||
mapData.put("M", name.substring(NumConstant.ONE)); |
|||
} |
|||
return mapData; |
|||
} |
|||
} |
Loading…
Reference in new issue