在实际业务中会有很多通过和流水号拼接,形成一个用户唯一id的标识。由于本次用的是和oracle数据库结合,所以会用到oracle的序列,为了演示方便,所以把动态得到的序列号写成了静态的了。具体源码如下:
package com.evan.string;
import java.text.SimpleDateFormat;
public class BarcodeGenerateTest {
public static void main(String[] args) {
String dept = "0001";//分院id号
int max = 202;//当前序列的下一个序列
SimpleDateFormat sd = new SimpleDateFormat("yyMMdd");
String day = sd.format(new java.util.Date());
String spk = String.format("%05d", max);
//条码号生成规则: 分院id号+999+当前日期+当前序列的下一个序列
String barcode = dept + "999" + day + spk;
System.out.println(barcode);//000199915050700202
/**前面补零 将条码号强制补齐为十八位,在Excel导入时,可能会遇到,因为excel条码显示为000199915050700202
但是传递到后台后就变成199915050700202,三个零自动就没了。可以用强制补零来解决。*/
String sglCheckId = "123456789";
String result = String.format("%018d", Integer.valueOf(sglCheckId));
System.out.println(result);
}
}
但是这样做可能会有一个问题,就是在同一天当序列增长到最大值时,序列会从最小值重新开始,这样会导致条码重复。
解决办法目前可能有两个个:
1、要求业务部门,当前最多可导入10万条数据 。(目前真是这样做的)
2、将条码号的生成规则改变,增加两个数量级。
原文地址:http://blog.csdn.net/zl544434558/article/details/45556815