RandomUUID()を使用してUUIDを生成する短いユーティリティがあります。
String uuid = UUID.randomUUID().toString();
ただし、生成されたuuidは長すぎて長さが36です。
とにかくUUIDの長さを36から16または16近くに減らすことができますか?
一意である必要がない場合は、好きな長さを使用できます。
たとえば、これを行うことができます。
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ビットバイトを使用できます。
はい、この機能を使用して作成できます。
public static String shortUUID() {
UUID uuid = UUID.randomUUID();
long l = ByteBuffer.wrap(uuid.toString().getBytes()).getLong();
return Long.toString(l, Character.MAX_RADIX);
}