最近做人事管理系统,发现添加用户名时有很多重名的情况,导致在登陆时根本无法区别是哪个用户,于是借鉴了以前公司的域名管理方法
即为每个用户分配一个域名(不会重复的),然后登陆时按照域名密码登陆。
例如:张三对应的域名(zhangs),张山就会对应(zhangs-a),张顺就对应(zhangs-b)依次类推
package ray.main;
import java.util.ArrayList;
import java.util.List;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
public class ChineseToEnglish {
// 将字符串转移为ASCII码
public static String getCnASCII(String cnStr) {
StringBuffer strBuf = new StringBuffer();
byte[] bGBK = cnStr.getBytes();
for (int i = 0; i < bGBK.length; i++) {
strBuf.append(Integer.toHexString(bGBK[i] & 0xff));
}
return strBuf.toString();
}
// 将汉字转换为全拼
public static String getPingYin(String src) {
char[] t1 = null;
t1 = src.toCharArray();
String[] t2 = new String[t1.length];
HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
t3.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 控制拼音大小写
t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
t3.setVCharType(HanyuPinyinVCharType.WITH_V);
String t4 = "";
int t0 = t1.length;
try {
for (int i = 0; i < t0; i++) {
// 判断是否为汉字字符
if (java.lang.Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {
t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);
t4 += t2[0];
} else
t4 += java.lang.Character.toString(t1[i]);
}
// System.out.println(t4);
return t4;
} catch (BadHanyuPinyinOutputFormatCombination e1) {
e1.printStackTrace();
}
return t4;
}
// 返回中文的首字母
public static String getPinYinHeadChar(String str) {
String convert = "";
for (int j = 0; j < str.length(); j++) {
char word = str.charAt(j);
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
if (pinyinArray != null) {
convert += pinyinArray[0].charAt(0);
} else {
convert += word;
}
}
return convert;
}
// 取汉字首个全拼和其他汉字首字母leip/zhangwp
public static String getFirstPinYinAndHeaderChar(String str) {
if((null == str) || str.length() == 0){
return null;
}
StringBuilder sb = new StringBuilder();
// 得到首个汉字全拼
String s = getPingYin(str.charAt(0) + "");
sb.append(s);
// 得到其他汉字的首字母
for (int i = 1; i < str.length(); i++) {
s = getPinYinHeadChar(str.charAt(i) + "");
sb.append(s);
}
return sb.toString();
}
// 递归生成唯一的名字,在名字后加 -a/ -b /-c
public static String genUniqueName(String srcName, char separator, List<String> lists) {
if ((null == srcName) || (lists == null)) {
return null;
}
String name = getFirstPinYinAndHeaderChar(srcName);
if(name == null){
return null;
}
if (lists.indexOf(name) == -1) {
return name;
}
if(separator == '\0'){
separator = '-';
}
String sTmp = null;
for (char c = 'a'; c <= 'd'; c++) {
sTmp = name + separator + c;
if (lists.indexOf(sTmp) == -1) {
return sTmp;
}
}
String result = null;
for(char c = 'a'; c <= 'd'; c++){
sTmp = name + separator + c;
result = genUniqueName(sTmp, separator, lists);
if(!sTmp.equalsIgnoreCase(result)){
return result;
}
}
return null;
}
public static void main(String[] args) {
System.out.println(getPingYin("雷盼"));
System.out.println(getPinYinHeadChar("雷子诺"));
System.out.println(getCnASCII("张文苹"));
System.out.println(getFirstPinYinAndHeaderChar("张文凭"));
List<String> list = new ArrayList<String>();
list.add("zhangwp");
list.add("zhangwp-a");
list.add("zhangwp-b");
list.add("zhangwp-d");
list.add("zhangwp-c");
//List可以到时候对应数据库中所有用户域名的集合
System.out.println(genUniqueName("张文苹", '-', list));
}
}
输出:
leipan
lzn
d5c5cec4c6bb
zhangwp
zhangwp-a-a
过程中需要用到一个jar包 jar包下载地址
本文探讨了一种创新的人事管理系统解决方案,通过为每位员工分配唯一的域名来区分用户重名问题,实现基于域名的登陆方式。文中详细介绍了从汉字到全拼的转换方法,并通过代码示例展示了如何生成唯一域名。最后,通过实例验证了方法的有效性,确保了员工在系统中的身份独特性。
1257

被折叠的 条评论
为什么被折叠?



