oracle 流水号不重复,获取一个连续不重复的流水号

private static String channelCode="ABC";

private static SimpleDateFormat ymdFormat=new SimpleDateFormat("yyyyMMdd");

private static SimpleDateFormat hmsFormat=new SimpleDateFormat("HHmmssSSS");

private static final char[] _CHAR_MAGIC_CHAR=new char[]{'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'} ;

private static AtomicInteger seed= new AtomicInteger(Integer.MAX_VALUE);

/**

* 格式:标识+YYYYMMDD+交易码+11位流水,保证流水的唯一性

* @return

*/

public static String getSN(String strOpearteCode){

strOpearteCode=strOpearteCode.split("_")[0];

Date curr=new Date();

StringBuffer sb=new StringBuffer(channelCode);//渠道标识

sb.append(ymdFormat.format(curr));//YYYYMMDD

sb.append(strOpearteCode.substring(strOpearteCode.length()-3));//所发交易的“交易码”的最后三位

sb.append(hmsFormat.format(curr));//HHmmssSSS

int seedNum=seed.incrementAndGet();

sb.append(getRundom(seedNum));//两位随机码

return sb.toString();

}

private static String getRundom(int seed){

if(seed>=0){

seed=Integer.MAX_VALUE-seed;

}else{

seed=Integer.MAX_VALUE+1+seed;

}

int mod=seed%(_CHAR_MAGIC_CHAR.length*_CHAR_MAGIC_CHAR.length);

return _CHAR_MAGIC_CHAR[mod/ _CHAR_MAGIC_CHAR.length]+""+_CHAR_MAGIC_CHAR[mod% _CHAR_MAGIC_CHAR.length];

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值