Java 利用 UUID 生成唯一性 ID 示例代碼


用戶ID首先生成,訂單ID的生成可依賴用戶ID。

下面代碼前六位是日期,后八位是隨機數,用於生成用戶ID。

 1     public String getNewUserId() {
 2         String ipAddress = "";
 3         try {
 4             //獲取服務器IP地址
 5             ipAddress = InetAddress.getLocalHost().getHostAddress();
 6         } catch (Exception e) {
 7             logger.error("getNewUserId=" + e.getMessage());
 8         }
 9         //獲取UUID
10         String uuid = ipAddress + "$" + UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
11         //生成后綴
12         long suffix = Math.abs(uuid.hashCode() % 100000000);
13         SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
14         String time = sdf.format(new Date(System.currentTimeMillis()));
15         //生成前綴
16         long prefix = Long.parseLong(time) * 100000000;
17         String userId = String.valueOf(prefix + suffix);
18         return userId;
19     }

接下來的訂單ID就可以隨意點了,可添加自定義前綴等。

1     public String buildOrderIdByUserId(String userId) {
2         SimpleDateFormat df = new SimpleDateFormat("yyMMddHHmmss");
3         String time = df.format(new Date());
4         Random random = new Random();
5         int randomNum = random.nextInt(999) % 900 + 100;
6         StringBuilder sb = new StringBuilder("ZMM");
7         return sb.append(time).append(userId).append(randomNum).toString();
8     }

如果還有相應的月份分表,之后就可以根據用戶ID得到該用戶所在月表,根據該訂單得到該訂單所在月表,直接截取相應ID的固定位置即可

比如:

1     public String getMonthByOrderId(String orderId) {
2         return "20" + orderId.substring(3, 7);
3     }

時間字符串可以使用JDK8新增的線程安全的時間格式化類來生成:

        LocalDateTime localDateTime = LocalDateTime.now();
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
        String dateStr = dateTimeFormatter.format(localDateTime);
        System.out.println(dateStr);

附錄:

(1)記錄一個博客,介紹唯一性ID的,可以了解一下:https://www.cnblogs.com/haoxinyue/p/5208136.html

(2)附加一個我目前項目中用的一個代碼:

/**
     * 根據指定前綴生成ID
     * @param preStr
     * @return
     */
    public static String buildId(String preStr){
        if (StringUtils.isEmpty(preStr)){
            logger.error("buildId preStr is error, preStr = " + preStr);
            return null;
        }
        //獲取UUID
        String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
        //生成后綴
        long suffix = Math.abs(uuid.hashCode() % 100000000);
        SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
        String time = sdf.format(new Date(System.currentTimeMillis()));
        //生成前綴
        long prefix = Long.parseLong(time) * 100000000;
        String userId = preStr + String.valueOf(prefix + suffix);
        return userId;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM