Java 使用 UUID 生成唯一不重复的订单编号的方法

做生成订单编号的功能。

网友指点了一下可以简单的使用 uuid 来做,但是 uuid 产生的是一个不重复的字符串。用来当做订单编号,显然不太合适。但是我们可以换个底版,来让它变成一组数字。

 

原理其实很简单,就是借助 java 中 String 类的 hashcode() 方法即可。整个代码实现如下所示:

1

2

3

4

5

6

7

8

9

10

11

public static String createOrderId() {  

    int machineId = 1;//最大支持1-9个集群机器部署  

    int hashCodeV = UUID.randomUUID().toString().hashCode();  

    if(hashCodeV < 0) {//有可能是负数  

        hashCodeV = - hashCodeV;  

    }  

    // 0 代表前面补充0       

    // 4 代表长度为4       

    // d 代表参数为正数型  

    return machineId+String.format("%015d", hashCodeV);  

}

通过对多线程的测试,结果是并发在2000左右都没有问题,可以放心的使用。

拓展:

UUID生成的字符序列是没有顺序的,这时候推荐大家使用Twitter的雪花算法,这个算法可以做的比UUID更好。根据需求来选择吧,具体的内容在这里就不列举了,上手很快的,大家自行谷歌吧。

Java中,可以使用以下方法生成重复的规则编号: 1. 使用UUID(Universally Unique Identifier)。UUID是一个标准化的字符串,具有128位长度,几乎可以保证每次生成的值都是唯一的。可以通过JavaUUID类来生成重复的规则编号。例如: ```java import java.util.UUID; public String generateRuleNumber() { UUID uuid = UUID.randomUUID(); return uuid.toString(); } ``` 2. 使用时间戳+随机数。通过将当前的时间戳转换为字符串,并且附加上一个随机数,可以生成一个较为独特的规则编号。例如: ```java import java.util.Date; import java.util.Random; public String generateRuleNumber() { long timestamp = new Date().getTime(); Random random = new Random(); int randomNum = random.nextInt(1000); return String.valueOf(timestamp) + String.valueOf(randomNum); } ``` 3. 使用数据库自增ID。如果你将规则编号存储在数据库中,可以使用数据库的自增ID生成规则编号。通过在插入规则数据时获取自动生成ID,并将其转换为字符串作为规则编号。例如: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public String generateRuleNumber() { String ruleNumber = null; try { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); Statement stmt = conn.createStatement(); stmt.executeUpdate("INSERT INTO rules (rule_name) VALUES ('New Rule')", Statement.RETURN_GENERATED_KEYS); ResultSet rs = stmt.getGeneratedKeys(); if(rs.next()) { int ruleId = rs.getInt(1); ruleNumber = String.valueOf(ruleId); } rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } return ruleNumber; } ``` 这些方法都可以在Java生成重复的规则编号,选择哪种方法取决于你的具体需求和环境。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值