流水号36进制递增

//流水号组成部分为 0-9 A-Z,长度3位、数字到9下个数就是A,以此类推


public class test {

    public static int initVal = 0;

    public static void main(String[] args) {
        for (int i = 0; i <= 46654; i++) {// 46654
            System.out.println(addZeroForNum(Long.toString(getData(), 36).toUpperCase()));
        }
    }

    public static int getData() {
        return ++initVal;
    }

    public static String addZeroForNum(String str) {
            int strLen = str.length();
            StringBuffer sb = null;
             while (strLen < 3) {
                   sb = new StringBuffer();
                   sb.append("0").append(str);// 左补0
                   str = sb.toString();
                   strLen = str.length();
             }
            return str;
        }


}

 

转载于:https://my.oschina.net/u/3271403/blog/3019884

### Java 中实现随机生成唯一流水号 为了确保流水号唯一性并满足不同长度需求,在Java中可以采用多种方法来构建这种功能。以下是几种常见的方式: #### 方法一:基于时间戳加随机数的六位流水号 通过组合当前日期时间和一个小范围内的随机整数值,能够创建既具有时间顺序又不易重复的编号。 ```java import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; public class RandomSerialGenerator { private static final int RANDOM_MIN = 100; private static final int RANDOM_MAX = 999; public static String generateSixDigitSerial() { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); StringBuilder serialBuilder = new StringBuilder(sdf.format(new Date())); // 获取当前时间作为前缀 Random random = new Random(); int randomNumber = random.nextInt(RANDOM_MAX - RANDOM_MIN + 1) + RANDOM_MIN; return serialBuilder.append(randomNumber).toString(); } } ``` 此代码片段展示了如何利用`SimpleDateFormat`类格式化当前时间为指定模式,并附加一个三位到四位之间的随机数字以形成最终的六位序列号[^1]。 #### 方法二:固定格式三十ニ位(32-bit)UUID风格流水号 对于更广泛的应用场景,特别是当需要跨多个实例或服务器保持全局唯一时,推荐使用UUID算法变体来生成较长且几乎不可能冲突的标识符。 ```java import java.util.UUID; public class UUIDBasedSerialGenerator { public static String generateThirtyTwoBitSerial() { return UUID.randomUUID().toString().replaceAll("-", "").toUpperCase(); } } ``` 上述例子中的函数会返回去掉连字符后的标准大写形式UUID字符串,总长度正好为三十二个十六进制字符[^2]。 #### 方法三:年月加四位序号型流水号 如果业务逻辑允许按时间段分配连续性的编码,则可以根据给定的时间模板拼接上递增计数器得到符合特定规则的结果。 ```java import java.text.SimpleDateFormat; import java.util.concurrent.atomic.AtomicInteger; class SequenceSerialGenerator { private static AtomicInteger counter = new AtomicInteger(0); private static final Object lock = new Object(); public static synchronized String generateSequenceSerial() throws Exception{ SimpleDateFormat formatter = new SimpleDateFormat("yyMM"); while (true){ try { Thread.sleep(1); // 防止过快长导致溢出 int nextValue = counter.incrementAndGet(); if(nextValue >= 10000){ throw new RuntimeException("Counter overflow!"); } return formatter.format(new Date()) + String.format("%04d",nextValue); } catch (InterruptedException e){ continue; } } } } ``` 这里定义了一个静态内部锁对象用于同步访问共享资源——即原子整数变量counter,每次调用都会尝试加其值直到达到设定的最大界限为止;同时运用了`String.format()`来进行零填充操作使得输出始终维持四位宽度[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值