Acme-CPANModules-UUID
view release on metacpan or search on metacpan
using 1-3 bits in the "N" position. RFC 4122 defines 4 variants (0 to
3), two of which (0 and 3) are for legacy UUIDs, so that leaves variants
1 and 2 as the current specification.
There are 5 "versions" of UUID for both variants 1 & 2, each might be
more suitable than others in specific cases. The version information is
encoded in the M position. Version 1 (v1) UUIDs are generated from a
time and a node ID (usually the MAC address); version 2 (v2) UUIDs from
an identifier (group/user ID), a time, and a node ID; version 4 (v4)
UUIDs from a rando/mpseudo-random number; version 3 (v3) UUIDs from
hashing a namespace using MD5; version 5 (v5) from hashing a namespace
using SHA-1.
Data::UUID should be your first choice, and when you cannot install XS
modules you can use UUID::Tiny instead.
Aside from the modules listed as entries below, there are also:
App::UUIDUtils (containing CLIs to create/check UUID), Data::GUID
(currently just a wrapper for Data::UUID).
ACME::CPANMODULES ENTRIES
Data::UUID
Author: RJBS <https://metacpan.org/author/RJBS>
This module creates v1 and v2 UUIDs. Depending on the OS, for MAC
address, it usually uses a hash of hostname instead. This module is
XS, so performance is good. If you cannot use an XS module, try
UUID::Tiny instead.
The benchmark code creates 1000+1 v1 string UUIDs.
UUID::FFI
Author: PLICEASE <https://metacpan.org/author/PLICEASE>
This module provides access to libuuid via the FFI interface. It can
create v1 as well as v4 (random) UUIDs. Note that Data::UUID
(XS-based) is faster this module (FFI-based).
The benchmark code creates 1000+1 v1 string UUIDs.
UUID::Tiny
Author: CAUGUSTIN <https://metacpan.org/author/CAUGUSTIN>
This module should be your go-to choice if you cannot use an XS
module. It can create v1, v3, v4 UUIDs. However, the random v4 UUIDs
are not cryptographically secure; if you need cryptographically
secure random UUIDs, use Crypt::Misc.
The benchmark code creates 1000+1 v1 string UUIDs.
See also: Types::UUID which is a type library that uses Data::UUID
as the backend.
UUID::Random
Author: PERLER <https://metacpan.org/author/PERLER>
This module simply uses 32 calls to Perl's rand() to construct each
random hexadecimal digits of the UUID (v4). Not really recommended,
since perl's default pseudo-random generator is neither
cryptographically secure nor has 128 bit of entropy. It also does
not produce v4 UUIDs that conform to RFC 4122 (no encoding of
variant & version information).
To create a cryptographically secure random UUIDs, use Crypt::Misc.
The benchmark code creates 1000+1 v4 string UUIDs.
UUID::Random::PERLANCAR
Author: PERLANCAR <https://metacpan.org/author/PERLANCAR>
Just another implementation of UUID::Random.
The benchmark code creates 1000+1 v4 string UUIDs.
UUID::Random::Secure
Author: PERLANCAR <https://metacpan.org/author/PERLANCAR>
Just like UUID::Random, except it uses Math::Random::Secure's
irand() to produce random numbers.
The benchmark code creates 1000+1 v4 string UUIDs.
Crypt::Misc
Author: MIK <https://metacpan.org/author/MIK>
This module from the CryptX distribution has a function to create
and check v4 UUIDs.
The benchmark code creates 1000+1 v4 string UUIDs.
UUID
Author: JRM <https://metacpan.org/author/JRM>
This module generates DCE-compatible UUIDs, which according to RFC
belongs to the legacy variants.
The benchmark creates 1000+1 random UUIDs.
ACME::CPANMODULES FEATURE COMPARISON MATRIX
+-------------------------+-----------+-----------+-----------+-----------+-----------+-------+-------+----------------+----------------------+---------------+
| module | create_v1 | create_v2 | create_v3 | create_v4 | create_v5 | is_pp | is_xs | v4_rfc4122 *1) | v4_secure_random *2) | create_legacy |
+-------------------------+-----------+-----------+-----------+-----------+-----------+-------+-------+----------------+----------------------+---------------+
| Data::UUID | yes | yes | no | no | no | no | yes | N/A | N/A | N/A |
| UUID::FFI | yes | no | no | yes | no | no | yes | yes | no | N/A |
| UUID::Tiny | yes | no | yes | yes | yes | yes | no | yes | no | N/A |
| UUID::Random | no | no | no | yes | no | yes | no | no | no | N/A |
| UUID::Random::PERLANCAR | no | no | no | yes | no | yes | no | yes | no | N/A |
| UUID::Random::Secure | no | no | no | yes | no | yes | no | yes | yes | N/A |
| Crypt::Misc | no | no | no | yes | no | yes | no | yes | yes | N/A |
| UUID | no | no | no | no | no | no | yes | no | no | yes |
+-------------------------+-----------+-----------+-----------+-----------+-----------+-------+-------+----------------+----------------------+---------------+
Notes:
1. v4_rfc4122: Whether the generated v4 UUID follows RFC 4122
specification (i.e. encodes variant and version information in M & N
positions)
2. v4_secure_random: Whether the module uses cryptographically secure
pseudo-random number generator for v4 UUIDs
BENCHMARKED MODULES
( run in 0.332 second using v1.01-cache-2.11-cpan-d0baa829c65 )