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