• 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;
        }
  • 相关阅读:
    Android 千牛数据库分析
    Flutter 你需要知道的那些事 01
    Flutter 异常处理之图片篇
    Flutter 即学即用系列博客——09 EventChannel 实现原生与 Flutter 通信(一)
    Flutter 即学即用系列博客——08 MethodChannel 实现 Flutter 与原生通信
    Flutter 即学即用系列博客——06 超实用 Widget 集锦
    Kingfisher-swift缓存图片框架
    swift冒泡排序,swift快速排序,swift归并排序,swift插入排序,swift基数排序
    swift声明属性为某个类型同时遵循某协议
    Xcode真机运行报错iPhone has denied the launch request
  • 原文地址:https://www.cnblogs.com/wbxk/p/9559531.html
Copyright © 2020-2023  润新知