0

如何使用 com.google.common.base.BaseEncoding 库生成唯一 ID。

public class google {

    static synchronized String generateIdforDCR()
    {
        return (String)BaseEncoding.base32().lowerCase().encode(UUID.randomUUID().toString().getBytes(Charsets.US_ASCII));

    }
    public static void main(String[] args)
    {
        for(int i=0;i<100;i++)
        {
            System.out.println(google.generateIdforDCR());
        }


    }

}

输出是:

gbsdgzrvgrsgclldgeytiljuga2wmllcmjstkllbmm3dszjymnrtcyjwga======
gi3gknbzg5tgiljrmq4tkljumqytmllbgfswkllbmiztim3fhbtdomldmq======
me4danrzgiyggllggu2dgljuhbrgillcmjswiljvgm2wimlemnrtqolgha======
meygmmrxgzsdgljqgbtgeljumm2wgllbmjrdsljrga3dgzrsguztgn3fmi======

我不想要这么大但独一无二的字符串。

4

1 回答 1

2

UUID 的长度为 128 位,这意味着它将 base32 编码为这 58 个字符(您可以去掉尾随的等号)。您可以通过使用 base64 来缩短它,但这并不是什么大胜利。如果您想要更短且保证独一无二的东西,您需要一个柜台。

就像是

private static AtomicLong counter = new AtomicLong();

static String generateIdforDCR() { // no need for synchronized
    return String.valueOf(counter.getAndIncrement());
}

应该做。您可以对其进行 base64 编码以获得更短的输出。或者干脆使用base36:

static String generateIdforDCR() { // no need for synchronized
    return Long.toString(counter.getAndIncrement(), Character.MAX_RADIX);
}
于 2013-10-15T10:53:56.263 回答