通过时间和随机数字产生基本不重复的ID数字

工作需要研究别人做的,非原创.

首先建立一个随机数类,通过传入的数字来生成对应位数的随机正整数

public  static  String getRandom(int i){
        Random rd =new Random(); //生产一个可以产生0.0-1.0之间的随机数的对象
        if (i ==0 ){
            return ""; //如果传来的值为0 则返回一个空值
        }
        StringBuilder sb = new StringBuilder(); //生成一个可变的字符串
        for (int k = 0; k < i; k++){
            sb.append(rd.nextInt(9)); //每次循环都往字符串上增加一个0-9之间的随机正整数
        }
        return  sb.toString();//循环完毕,将i位的可变字符串转换为字符串类型返回
    }

然后建立一个将时间转换为指定位数数字的类,并且使用上面的随机数类产生指定位数的随机数字来避免重复

    public  static  String getDateTimeId(int i){
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmssSSS");//将时间转为17位的数字,最后三位为毫秒
        String sdf =df.format(new Date())+getRandom(i);//生成一个17+k位的随机数
        return sdf;//返回这个随机数
    }

时间可以通过其他方式获取,这样产生的随机数基本就不会重复了,需要注意的是,数据库用整数类型来接收此id,bigint数据类型的上限是19位,需要注意控制随机数的位数避免超出上限.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值