不够位数的在前面补0,保留num的长度位数字



import java.text.DecimalFormat;
import java.util.Date;

import k.common.util.DateUtil;

/**
 * 
 * @ClassName OrderNoCreator
 * @Description: 订单号生成器
 * @author: GuXiYang  
 * @date: 2017/02/14 15:06:18
 */
public class OrderNoCreator {

    //流水号加1后返回,流水号长度为4   
    private static final String STR_FORMAT = "000000";    
      
	/**
	 *有时候我们需要固定长度的字符串做流水号,每添加一个记录时流水号的值加1,
而流水号的长度保持不变。
一般的做法是先把流水号转换为数值型,然后此数值加1,再把数值转换为字符串,
长度不够流水号长度时再在前面补0: 
	 * @Description: 流水号加1后返回
	 * @author: GuXiYang
	 * @date: 2017/02/14 15:56:19  
	 * @param liuShuiHao
	 * @return
	 */
	public static String haoAddOne(String liuShuiHao){   
		Integer intHao = Integer.parseInt(liuShuiHao);   
		intHao++;   
		String strHao = intHao.toString();   
		while (strHao.length() < liuShuiHao.length())   
			strHao = "0" + strHao;   
		return strHao;   
	}   

    public static String getOrder(String liuShuiHao){   
        Integer intHao = Integer.parseInt(liuShuiHao);   
        intHao++;   
        DecimalFormat df = new DecimalFormat(STR_FORMAT);   
        return df.format(intHao);   
    }  
	/**
	 * 不够位数的在前面补0,保留code的长度位数字
	 * @param code
	 * @return
	 */
	public static String autoGenericCode(String code) {
		try {
			// 保留code的位数
			return  String.format("%0" + code.length() + "d", Integer.parseInt(code) + 1);
		} catch (NumberFormatException e) {
			e.printStackTrace();
		}
		return "";
	}

	/**
	 * @Description: 不够位数的在前面补0,保留num的长度位数字
	 * @author: GuXiYang
	 * @date: 2017/02/14 15:10:14  
	 * @param code 字符串
	 * @param num 保留位数
	 * @return
	 */
	public static  String autoGenericCode(String code, int num) {
		try {
			// 保留num的位数
			// 0 代表前面补充0     
			// num 代表长度为4     
			// d 代表参数为正数型 
			return String.format("%0" + num + "d", Integer.parseInt(code) + 1);
		} catch (NumberFormatException e) {
			e.printStackTrace();
		}
		return "";
	}

	/**
	 * 根据银行编号位数要求根据采用交易码+日期+Squense
	 */
	public  static String createNo()
	{
		int bankLength =30;
		long sequence = 85462;
		String businessCode ="FB01";
		businessCode = businessCode.substring(2);
		String transDate = DateUtil.formatDateToString(new Date(), "yyMMdd");
		//根据银行流水号长度判断如何拼接字符串,无法处理1-9位流水号的情况
		System.out.println("生成的sequence为:"+sequence);
		int sqlength = 0;
		if(bankLength <= 11){
			sqlength = bankLength;
			return String.format("%1$0"+sqlength+"d",sequence);
		}else if(bankLength >= 12 && bankLength < 14){
			sqlength =  bankLength - transDate.length();
			return String.format("%s%2$0"+sqlength+"d",transDate,sequence);
		}else{
			sqlength =  bankLength - transDate.length() - businessCode.length();
			return String.format("%s%s%3$0"+sqlength+"d",transDate,	businessCode,sequence);
		}
	}

	public static void main(String[] args) {
		System.out.println(OrderNoCreator.autoGenericCode("265"));
		System.out.println(OrderNoCreator.autoGenericCode("3223",10));
		System.out.println( String.format("%s%s%3$025d",20170204,01,56126));
		System.out.println(OrderNoCreator.haoAddOne("999"));
		System.out.println(OrderNoCreator.getOrder("2565626"));
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值