web-dev-qa-db-ja.com

randomUUID()を使用して生成されたUUIDの長さを減らす方法

RandomUUID()を使用してUUIDを生成する短いユーティリティがあります。

String uuid = UUID.randomUUID().toString();

ただし、生成されたuuidは長すぎて長さが36です。

とにかくUUIDの長さを36から16または16近くに減らすことができますか?

19
AppleBud

一意である必要がない場合は、好きな長さを使用できます。

たとえば、これを行うことができます。

Random Rand = new Random();
char[] chars = new char[16];
for(int i=0;i<chars.length;i++) {
    chars[i] = (char) Rand.nextInt(65536);
    if (!Character.isValidCodePoint(chars[i]))
        i--;
}
String s = new String(chars);

これにより、ほぼ同じ程度のランダム性が得られますが、\u0000および\ufffd

印刷可能なASCII文字が必要な場合は、好きなだけ短くすることができますが、一意性の可能性が大幅に低下します。

UUID uuid = UUID.randomUUID();
String s = Long.toString(uuid.getMostSignificantBits(), 36) + '-' + Long.toString(uuid.getLeastSignificantBits(), 36);

これは平均で26文字、最大で27文字になります。

Base64エンコードを使用して、22文字に減らすことができます。

Base94を使用すると、20文字まで取得できます。

\ u0000から\ ufffdまでの有効な文字の全範囲を使用する場合は、9文字または17バイトに減らすことができます。

文字列を気にしない場合は、16の8ビットバイトを使用できます。

27
Peter Lawrey

はい、この機能を使用して作成できます。

public static String shortUUID() {
  UUID uuid = UUID.randomUUID();
  long l = ByteBuffer.wrap(uuid.toString().getBytes()).getLong();
  return Long.toString(l, Character.MAX_RADIX);
}
0
Pritam Panja