/**
* 判断姓名字符长度
* 字符串为空返回0;有中文返回中文字符数;无中文返回2
* @param CustomerSn
* @return
*/
private Integer getNameLength(Integer CustomerSn){
Integer sealWidth = 32;
CustomerDto customerDto = customerService.getCustomerBySnForEsign(CustomerSn);
String custSurname = customerDto.getCustSurname();
String custName = customerDto.getCustName();
Integer SurnameLen = this.count(custSurname);
Integer NameLen = this.count(custName);
Integer length = SurnameLen+NameLen;
if(length>=0 && length<=4){
sealWidth = length*16;
}else if(length.equals(5) ||length.equals(6)){
sealWidth = 3*16;
}
return sealWidth;
}
/***
* 统计字符串中中文,英文,数字,空格等字符个数
* @param str 需要统计的字符串
*/
private Integer count(String str) {
int chCharacter = 0;//中文字符
int enCharacter = 0;//英文字符
int spaceCharacter = 0;//空格
int numberCharacter = 0;//数字
int otherCharacter = 0;//其他字符
if (null == str || str.equals("")) {
return 0;
}
for (int i = 0; i < str.length(); i++) {
char tmp = str.charAt(i);
if ((tmp >= 'A' && tmp <= 'Z') || (tmp >= 'a' && tmp <= 'z')) {
enCharacter ++;
} else if ((tmp >= '0') && (tmp <= '9')) {
numberCharacter ++;
} else if (tmp ==' ') {
spaceCharacter ++;
} else if (isChinese(tmp)) {
chCharacter ++;
} else {
otherCharacter ++;
}
}
logger.info("字符串:" + str + " "+"中文字符有:" + chCharacter+"英文字符有:" + enCharacter+"数字有:" + numberCharacter+"空格有:" + spaceCharacter+"其他字符有:" + otherCharacter);
if(chCharacter>0){
return chCharacter;
}else{
return 1;
}
}
private boolean isChinese(char ch) {
//获取此字符的UniCodeBlock
Character.UnicodeBlock ub = Character.UnicodeBlock.of(ch);
// GENERAL_PUNCTUATION 判断中文的“号
// CJK_SYMBOLS_AND_PUNCTUATION 判断中文的。号
// HALFWIDTH_AND_FULLWIDTH_FORMS 判断中文的,号
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
return true;
}
return false;
}