I generate UUIDs, and valid them against a Regex in my code; I just ran into problems that confused me
Here is the code that generates UUIDs (in a mongodb context)
import java.util.UUID;
... ...
Document setOnInsert = new Document(Params.sender, UUID.randomUUID())
.append(Params.userDevice, userDevice)
.append(Params.hostId,"");
This is the code of validating an UUID; I had copied the Regex from this 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();
}
}
and below are the 2 UUIDs that I have problems with
aa4aaa2c-c6ca-d5f5-b8b2-0b5c78ee2cb7
b24dd64c-de6b-5bf6-6283-aa2167cc93a7
These two UUIDs had been generated by the code mentioned above; the validating method (isUUID()) judged them as invalid in my latest debug; yet I posted these UUIDs to an online validator , and it says ok
This is my system information
wjz@bj:~$ 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)
wjz@bj:~$
wjz@bj:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.1 LTS
Release: 16.04
Codename: xenial
wjz@bj:~$
Some background: I had been working on jdk 1.8.0_111; these UUIDs had been generated then, and had no problems. then I upgraded to 1.8.0_121 today, and run into this problem...
So my question is: Whether the above mentioned UUIDs are correct or wrong? who to believe, the generator or the validation
Format. In its canonical textual representation, the 16 octets of a UUID are represented as 32 hexadecimal (base-16) digits, displayed in five groups separated by hyphens, in the form 8-4-4-4-12 for a total of 36 characters (32 hexadecimal characters and 4 hyphens). For example: 123e4567-e89b-12d3-a456-426614174000.
Use the . match() method to check whether String is UUID.
Universally Unique Identifiers, or UUIDS, are 128 bit numbers, composed of 16 octets and represented as 32 base-16 characters, that can be used to identify information across a computer system.
My suggestion is, do not reinvent the wheel.
Basically, if you generate the ids with UUID.randomUUID()
, there is no need to validate them.
If you are anyway curious that they might get manipulated manually.
You can just use UUID.fromString(yourUUID)
and catch the IllegalArgumentExcepetion
and the NumberFormatException
that might be thrown.
Throws IllegalArgumentExcepetion
:
If name does not conform to the string representation as described in toString()
Furthermore, you can check behind, if the UUID got converted correctly with
UUID id = UUID.fromString(yourUUID);
if(id.toString().equals(yourUUID){
//success
}
You can use UUID.randomUUID()
which will generate a valid UUID, you dont need the regx.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With