Я генерирую UUID и применяю их к Regex в своем коде; Я просто столкнулся с проблемами, которые путают меняЧто такое действительный UUID?
Вот код, который генерирует UUID, (в контексте MongoDB)
import java.util.UUID;
... ...
Document setOnInsert = new Document(Params.sender, UUID.randomUUID())
.append(Params.userDevice, userDevice)
.append(Params.hostId,"");
Это код проверки правильности UUID; Я скопировал Regex из этого post
static final Pattern UUID = Pattern.compile("([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})");
public static boolean isUUID(String uuid){
if(uuid == null){
return false;
}else{
return UUID.matcher(uuid).matches();
}
}
и ниже на 2 UUID, которые у меня есть проблемы с
aa4aaa2c-c6ca-d5f5-b8b2-0b5c78ee2cb7
b24dd64c-de6b-5bf6-6283-aa2167cc93a7
Этих двух UUID, были генерируемых кодами, указанных выше; метод проверки (isUUID()) признал их недействительными в моей последней отладке; пока я отправил эти UUID, в онлайн validator, и он говорит, что нормально
Это моя система информации
[email protected]:~$ java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
[email protected]:~$
[email protected]:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.1 LTS
Release: 16.04
Codename: xenial
[email protected]:~$
Некоторые фона: Я работал на JDK 1.8.0_111; эти UUID были созданы тогда и не имели проблем. затем я обновился до 1,8,0_121 сегодня и столкнулся с этой проблемой ...
Так что мой вопрос: верны ли или нет вышеупомянутые UUID? кто должен верить, генератор или подтверждение
Почему бы просто не использовать класс UUID для их проверки? 'UUID.fromString()' – wvdz
Ну, проблема в этой части шаблона: '[1-5] [0-9a-f] {3} - [89ab] [0-9a-f] {3}' , В первом вы получите «d», где вы должны иметь 1-5; во втором у вас есть 6, где у вас должно быть 8-б. –
[RFC 4122] (https://tools.ietf.org/html/rfc4122) не имеет таких ограничений для первой шестнадцатеричной цифры этих групп, он просто говорит, что группа состоит из двух «hexOctet» (это две шестнадцатеричные цифры каждый). Вы ограничиваете его больше, чем это делает спецификация. Доверяйте встроенному генератору, не доверяйте валидатору «нашли где-нибудь в Интернете». – Amadan