java 唯一生成码

UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标 准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在 生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没 有网卡以其他方式获得)

Java 自带的:
UUID uuid = UUID.randomUUID();
System.out.println(uuid);

结果:6bf50d96-d85b-48ce-b7d2-c8d88a345af9
比较长

只要数字的话,可以使用 replaceAll(“”,”“);

或者时间是唯一的:

public String getString(){
String uuid ;
synchronized (this) {

      uuid = String.valueOf(System.currentTimeMillis());
         try {
        Thread.sleep(1);
         } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
         }

    }
return uuid ;

}

这里加了一个同步方法 ,假如是一个线程访问的话,加不加无所谓 。假如是多线程的话,
就必须得加了。 还有每执行一次休息1毫秒 ,目的是为了唯一。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生成防伪并保证唯一性,可以采用以下方法: 1. 选择一个长度适当的随机字符串作为前缀,如8位的随机数字。 2. 将前缀和当前时间戳拼接在一起,得到一个较长的字符串。 3. 对拼接后的字符串进行哈希计算,得到一个防伪的后缀。 4. 将前缀和后缀拼接在一起,得到最终的防伪。 5. 检查生成的防伪是否已经存在于数据库中,如果不存在,则将其保存到数据库中,否则重新生成防伪并重复上述步骤。 下面是一个Java示例: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; import java.util.Random; public class AntiFakeCodeGenerator { private static final int PREFIX_LENGTH = 8; private static final String JDBC_URL = "jdbc:mysql://localhost:3306/anti_fake?useSSL=false&serverTimezone=UTC"; private static final String JDBC_USERNAME = "root"; private static final String JDBC_PASSWORD = "password"; public static void main(String[] args) { String antiFakeCode = generateAntiFakeCode(); System.out.println("Generated anti-fake code: " + antiFakeCode); } public static String generateAntiFakeCode() { String prefix = generateRandomString(PREFIX_LENGTH); Timestamp timestamp = new Timestamp(System.currentTimeMillis()); String str = prefix + timestamp.toString(); String suffix = String.valueOf(str.hashCode()).replace("-", ""); String antiFakeCode = prefix + suffix.substring(0, 12 - PREFIX_LENGTH); if (isAntiFakeCodeExist(antiFakeCode)) { return generateAntiFakeCode(); } else { saveAntiFakeCode(antiFakeCode); return antiFakeCode; } } private static String generateRandomString(int length) { String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; Random random = new Random(); StringBuilder sb = new StringBuilder(); for(int i = 0; i < length; i++) { int number = random.nextInt(62); sb.append(str.charAt(number)); } return sb.toString(); } private static boolean isAntiFakeCodeExist(String antiFakeCode) { boolean exist = false; try (Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD); PreparedStatement stmt = conn.prepareStatement( "SELECT COUNT(*) AS count FROM anti_fake_code WHERE code = ?")) { stmt.setString(1, antiFakeCode); ResultSet rs = stmt.executeQuery(); if (rs.next() && rs.getInt("count") > 0) { exist = true; } } catch (SQLException e) { e.printStackTrace(); } return exist; } private static void saveAntiFakeCode(String antiFakeCode) { try (Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD); PreparedStatement stmt = conn.prepareStatement( "INSERT INTO anti_fake_code(code) VALUES(?)")) { stmt.setString(1, antiFakeCode); stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } } ``` 该代使用了一个长度为8的随机字符串作为前缀,然后将前缀和当前时间戳拼接在一起得到一个较长的字符串,再对其进行哈希计算得到后缀,最后将前缀和后缀拼接在一起得到最终的防伪。如果生成的防伪已经存在于数据库中,则重新生成防伪,直到生成一个未存在于数据库中的防伪。这样可以确保防伪唯一性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值