JAVA 字母数字混合自增(4位)

/**
* 获取Asc码
* @param st
* @return
*/
public static int getAscNum(String st) {  
        byte[] gc = st.getBytes();
        int ascNum = (int) gc[0];  
        return ascNum;  
    }  
  
    /** 
     * ASC转字符 
     *  
     * @param backnum 
     * @return 
     */  
    public static String getNumAsc(int num) {
        /*String str="";
       if(num<65||num>90)
        {
           return str;
        }*/
    char a = (char)num;  
        return a+"";
    }  

//主方法
private String getNextCashNumber(String number) {
if (StringUtil.isEmpty(number)) {
return "A001";
}
String pre = number.replaceAll("[^a-zA-Z]", "");// 获取字母部分
String counterStr = number.replaceAll("[^0-9]", "");
// 字符+数字
if (!StringUtil.isEmpty(counterStr)) {
int counter = Integer.parseInt(counterStr);// 获取数字部分
counter++;
DataMap checkMap = CheckNumGreaterMax(pre, counter);
if (!(boolean) checkMap.get("success")) {
counterStr = checkMap.get("counterStr").toString();
return pre + counterStr;
}
// A999->AB01
pre = letterCounter(pre);
if (pre.length() > 4) {
return "";
}
if (pre.length() < 4) {
pre += String.format("%0" + (4 - pre.length()) + "d", 1);
}
return pre;
}
String str = letterCounter(pre);
return str;
}

/**
* 字母自增
* @param str
* @return
*/
private String letterCounter(String str) {
int len = str.length();
int startI = len - 1;
String tempA = "";
String tempB = "";
while (true) {
tempA = "";
if (startI > 0) {
tempA = str.substring(0, startI);
}
if (startI < 0 && len == 0) {
tempA = str;
tempB = "A";
break;
} else {
tempB = str.substring(startI, len);
int lastCode = StringUtil.getAscNum(tempB);
lastCode++;
if (lastCode <= 90) {
tempB = StringUtil.getNumAsc(lastCode);
break;
}
startI--;
len--;
}
}


String newStr = tempA + tempB;
while (newStr.length() < str.length()) {
newStr += "A";
}
return newStr;
}

//检查数字计数器是否超额
private DataMap CheckNumGreaterMax(String pre, int counter) {
int preL = pre.length();
int maxConter = 0;
String str = "";
switch (preL) {
case 1:
maxConter = 999;
str = String.format("%03d", counter);
break;
case 2:
maxConter = 99;
str = String.format("%02d", counter);
break;
case 3:
maxConter = 9;
str = String.format("%01d", counter);
break;
}
DataMap map = new DataMap();
if (counter > maxConter) {
map.put("success", true);
} else {
map.put("success", false);
map.put("counterStr", str);
}
return map;
}


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值