Есть ли способ генерировать случайный UUID, который состоит только из чисел? - PullRequest
15 голосов
/ 11 ноября 2011

Класс Java UUID генерирует случайный UUID.Но это состоит из алфавитов и цифр.Для некоторых приложений нам нужны только цифры.Есть ли способ генерировать случайный UUID, который состоит только из чисел в Java?

UUID.randomUUID();

Ответы [ 9 ]

17 голосов
/ 18 июля 2016

Если вам не нужно случайное число, но используйте UUID только с числами:

String lUUID = String.format("%040d", new BigInteger(UUID.randomUUID().toString().replace("-", ""), 16));

в этом случае оставляется дополненным до 40 нулей ...

результаты для:
UUID: b55081fa-9cd1-48c2-95d4-efe2db322a54
в:
UUID: 0241008287272164729465721528295504357972

6 голосов
/ 11 ноября 2011

Почему бы просто не сгенерировать Random число и поместить его в нужный вам формат?

Это не даст вам уникальности из коробки. (т. е. вам нужно будет выполнять проверку каждого поколения и повторять логику)

Где, как и другие решения, которые берут биты UUID и преобразуют их в числа, они будут более детальными по уникальности. в зависимости от вашего варианта использования, вы все равно можете проверить уникальность с помощью этого подхода.

5 голосов
/ 30 января 2017

Хотя оригинальный постер этого вопроса помечал вопрос @Jigar Joshi как лучший ответ, я хотел бы добавить, что в некоторых случаях есть смысл использовать UUID, а не случайные числа. Разница в том, что UUID (универсально) уникальны (отсюда и название), а случайные числа - нет. Это всего лишь вопрос вероятности, получаете ли вы одно и то же число дважды или даже чаще при генерации случайных чисел, но это никогда не произойдет с UUID. Поэтому я считаю ответ @Chris Eibl лучшим.

4 голосов
/ 26 мая 2018

Для записи: UUID на самом деле являются 128-битными числами.

То, что вы видите в виде буквенно-цифровой строки, представляет собой представление этого 128-битного числа с использованием шестнадцатеричных цифр (0..9A..F).

Реальное решение состоит в том, чтобы преобразовать строку в ее соответствующее 128-битное число.И для его хранения вам понадобятся два Long (Long имеет 64 бит).

3 голосов
/ 09 февраля 2018
UUID uuid = UUID.randomUUID();
String numericUUID = Long.toString(uuid.getMostSignificantBits())
                   + Long.toString(uuid.getLeastSignificantBits());
1 голос
/ 11 ноября 2011

Зачем использовать класс UUID, если вам не нужен UUID?Похоже, вам нужно просто случайное число, которое можно получить с помощью класса java.util.Random.

0 голосов
/ 03 августа 2017

Random не является универсально уникальным.Если вы хотите использовать UUIDs в противоположность классу Random, как предлагали другие, вы можете просто использовать регулярное выражение для удаления всего, кроме чисел, из UUID.Попробуйте что-то вроде этого,

String id = UUID.randomUUID().toString().replaceAll("[^0-9]", "");

0 голосов
/ 25 июля 2013

String uuid = UUID.randomUUID (). ToString (). ReplaceAll ("-", ""); // strips '-'

0 голосов
/ 11 ноября 2011

Вызовите hashCode() для UUID, чтобы получить уникальное целое число.

...