zoukankan      html  css  js  c++  java
  • 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;
        }
  • 相关阅读:
    keras 与tensorflow 混合使用
    卷积神经网络入门
    Linux Shell
    使用Keras编写GAN的入门
    Wasserstein距离 和 Lipschitz连续
    keras与sklearn的结合使用
    keras与tensorboard结合使用
    【转】java 高并发 基础知识
    用python写map reduce程序
    【转】互联网时代的社会语言学:基于SNS的文本数据挖掘
  • 原文地址:https://www.cnblogs.com/wbxk/p/9559531.html
Copyright © 2011-2022 走看看