Ответ 1
Если вам не нужно, чтобы он был уникальным, вы можете использовать любую нужную вам длину.
Например, вы можете сделать это.
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, вы можете сделать их такими короткими, как вам нравится, но вероятность уникальности значительно падает. Что может сделать, так это использовать базу 36 вместо базы 16
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-битные байты.