Java生成随机数 两种方式简单 时间戳 方式和字母数字组合方式


//包名别忘了

import org.apache.commons.lang.StringUtils;

import java.math.BigInteger;
import java.util.Random;

/**

  • util - zh生成工具
    */
    public final class AcounntUtil {

    private static final long EPOCH = 1479533469598L; //开始时间,固定一个小于当前时间的毫秒数
    private static final int max12bit = 4095;
    private static final long max41bit= 1099511627775L;
    private static String machineId = "" ; // 机器ID

    /**
    *

    • 根据时间戳创建
    • @return

    */
    public static String create(){

    long time = System.currentTimeMillis() - EPOCH  + max41bit;
    // 二进制的 毫秒级时间戳
    String base = Long.toBinaryString(time);
    
    // 序列数
    String randomStr = StringUtils.leftPad(Integer.toBinaryString(new Random().nextInt(max12bit)),12,'0');
    if(StringUtils.isNotEmpty(machineId)){
        machineId = StringUtils.leftPad(machineId, 10, '0');
    }
    
    //拼接
    String appendStr = base + machineId + randomStr;
    // 转化为十进制 返回
    BigInteger bi = new BigInteger(appendStr, 2);
    
    return  Long.valueOf(bi.toString())+"";
    

    }

    //生成随机用户名,数字和字母组成,
    public static String getStringRandom(int length) {
    String val = "";
    Random random = new Random();
    //参数length,表示生成几位随机数
    for(int i = 0; i < length; i++) {
    String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
    //输出字母还是数字
    if( "char".equalsIgnoreCase(charOrNum) ) {
    //输出是大写字母还是小写字母
    int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
    val += (char)(random.nextInt(26) + temp);
    } else if( "num".equalsIgnoreCase(charOrNum) ) {
    val += String.valueOf(random.nextInt(10));
    }
    }
    return val;
    }
    }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM