java 后台id生成工具

项目中难免需要id记录,这里分享一下id生成工具,按需所取,业务不同,使用的id方法不同。

  /**
     * 图片名生成
     */
    public static String genImageName() {
        //取当前时间的长整形值包含毫秒
        long millis = System.currentTimeMillis();
        //加上三位随机数
        Random random = new Random();
        int end3 = random.nextInt(999);
        //如果不足三位前面补0
        String str = millis + String.format("%03d", end3);
        return str;
    }

    /**
     * 商品id生成
     */
    public static long genItemId() {
        //取当前时间的长整形值包含毫秒
        long millis = System.currentTimeMillis();
        //加上两位随机数
        Random random = new Random();
        int end2 = random.nextInt(99);
        //如果不足两位前面补0
        String str = millis + String.format("%02d", end2);
        long id = new Long(str);
        return id;
    }

    /**
     * 验证码随机数
     *
     * @param min 1 max 999999
     */

    public static int getRandNum(int min, int max) {
        int randNum = min + (int) (Math.random() * ((max - min) + 1));
        return randNum;
    }


    /**
     * 活动报名
     * 订单id生成
     * 首先,订单号有3个性质:1.唯一性  2.不可推测性 3.效率性
     * 唯一性和不可推测性不用说了,效率性是指不能频繁的去数据库查询以避免重复。
     * 况且满足这些条件的同时订单号还要足够的短。
     * 我在java下定制的订单号生成方式如下:
     * 订单ID
     * 目前规则来看,两个人在同一微秒提交订单重复的概率为1%
     * @return
     */
    public static long  orderId() {
        int r1 = (int) (Math.random() * (9) + 1);//产生2个0-9的随机数
        int r2 = (int) (Math.random() * (10));
        SimpleDateFormat yyyyMMddHHmmss = new SimpleDateFormat("yyMMddHHmmss");
        String format = yyyyMMddHHmmss.format(new Date());
        return Long.parseLong(format + r1+r2);
    }

    /**
     * 生成平台推广随即id
     */
    public static String genRandomNum(int pwd_len) {
        // 35是因为数组是从0开始的,26个字母+10个数字
        final int maxNum = 36;
        int i; // 生成的随机数
        int count = 0; // 生成的密码的长度
        char[] str = {  '1', '2', '3', '4', '5', '6', '7', '8', '9'};

        StringBuffer pwd = new StringBuffer("");
        Random r = new Random();
        while (count < pwd_len) {
            // 生成随机数,取绝对值,防止生成负数,

            i = Math.abs(r.nextInt(maxNum)); // 生成的数最大为36-1

            if (i >= 0 && i < str.length) {
                pwd.append(str[i]);
                count++;
            }
        }

        return pwd.toString();
    }
    /**
     * 这是典型的随机洗牌算法。
     * 流程是从备选数组中选择一个放入目标数组中,将选取的数组从备选数组移除(放至最后,并缩小选择区域)
     * 算法时间复杂度O(n)
     * @return 随机8为不重复数组
     */
    public static String generateNumber() {
        String no="";
//初始化备选数组
        int[] defaultNums = new int[10];
        for (int i = 0; i < defaultNums.length; i++) {
            defaultNums[i] = i;
        }

        Random random = new Random();
        int[] nums = new int[LENGTH];
//默认数组中可以选择的部分长度
        int canBeUsed = 10;
//填充目标数组
        for (int i = 0; i < nums.length; i++) {
//将随机选取的数字存入目标数组
            int index = random.nextInt(canBeUsed);
            nums[i] = defaultNums[index];
//将已用过的数字扔到备选数组最后,并减小可选区域
            swap(index, canBeUsed - 1, defaultNums);
            canBeUsed--;
        }
        if (nums.length>0) {
            for (int i = 1; i < nums.length; i++) {
                no+=nums[i];
            }
        }

        return no;
    }
    private static final int LENGTH = 8;

    private static void swap(int i, int j, int[] nums) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值