talend中的字母数字计数器生成id

问题描述

我正在尝试找出一种方法生成字母数字计数器,该计数器以下列方式创建数字:YYXXXXXXXX

哪里

  • YY是日历年
  • XXXXXXXX是ID,它是字母数字计数器(每年从ZZ01ZZZZ开始序列号00000001)

每年新的一年,应重置8个字符的ID,并以00000001重新开始

序列应显示

00000001
00000002
00000003
...
99999999

A0000001
A0000002
A0000003
...
A9999999

B0000001
B0000002
B0000003
...
B9999999

Z0000001
Z0000002
Z0000003
...
Z9999999
...

ZA000001
ZA000002
ZA000003
...
ZA999999

......
ZZZZZZZZ

最后一个数字应为ZZZZZZZZ。所以先是1-9,然后是A-Z。

一年中我们可以容纳的最后一个ID是20ZZZZZZZZ

该怎么做?

解决方法

基本上,它会将数字(长整数)转换为以36为底的基数,并用前面的零填充以匹配格式,并结合当年的最后两位数字,然后将结果作为字符串返回。

import java.time.LocalDateTime; //for getting the current year from system clock
public static String codegen(long input) {
    String lastTwoDigitsOfYear = Integer.toString(LocalDateTime.now().getYear()).substring(2); // the "YY"
    String radixOf36Base = Long.toString(input,36).toUpperCase();
    String radixOf36BasePadded = String.format("%8s",radixOf36Base).replace(' ','0'); //the "XXXXXXXX"
    return lastTwoDigitsOfYear + radixOf36BasePadded; //YYXXXXXXXX
    }