java UUID的长度缩减

java UUID的长度缩减,大多数情况下可以缩减到22位

不多说,直接上代码

package test.uid;

import java.util.HashMap;
import java.util.Map;

/**
 * @description: <br/>
 * @package test.AA.java
 * @author yang
 * @date 2016年11月3日 下午3:38:34
 */
public class AA {

    private static final String[] chars = { // <br>
            "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", // <br>
            "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", // <br>
            "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", // <br>
            "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", // <br>
            "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", // <br>
            "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", // <br>
            "Y", "Z", "a1", "a2" // <br>
    };

    // 统计UUID的长度变化范围
    public static void main(String[] args) throws InterruptedException {
        int time = 1 * 10000 * 1000;
        Map<Integer, Integer> sum = new HashMap<>();
        for (int ii = 0; ii < time; ii++) {
            int sbLength = uuid().length();
            if (sum.get(Integer.valueOf(sbLength)) != null) {
                int v = sum.get(Integer.valueOf(sbLength)).intValue();
                v++;
                sum.put(Integer.valueOf(sbLength), v);
            } else {
                sum.put(Integer.valueOf(sbLength), 1);
            }
        }
        for (Integer in : sum.keySet()) {
            System.out.println(in + ":" + sum.get(in));
        }
    }

    // 生成UUID
    public static String uuid() {
        StringBuilder sb = new StringBuilder();
        String uid = UUID.randomUUID().toString().replaceAll("-", "");
        int length = uid.length();
        // 将16进制数转换成64进制数
        // 2的4次方转化成2的6次方的数据
        // bcb da5 f41 172 4bc 28b 920 b1c 5f4 422 6e
        // 3位转2位
        int i = 0;
        for (; i < length; i = i + 3) {
            // 16进制数转化成10进制数
            int end = i + 3;
            if (end >= length) {
                end = length;
            }
            int t = Integer.parseInt(uid.substring(i, end), 16);
            // 10进制数转化成64进制数
            sb.append(chars[t % 64]);// 第二个数据
            sb.append(chars[t / 64]);// 第一个数据
        }
        return sb.toString();
    }
}

运行结果:

这是运行一千万次的统计结果,可以看出,绝大多数数的情况下长度控制在了22,23,24,长度超过30的,几乎没有。

22:5128484
23:3485544
24:1121942
25:227826
26:32459
27:3434
28:291
29:20

22:5131172
23:3481856
24:1122781
25:227813
26:32572
27:3480
28:311
29:14
30:1

22:5125815
23:3489413
24:1121142
25:227271
26:32491
27:3562
28:283
29:22
30:1

数学公式

使用MathJax渲染LaTex 数学公式,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值