Data-UUID-MT
view release on metacpan or search on metacpan
lib/Data/UUID/MT.pm view on Meta::CPAN
__END__
=pod
=encoding utf-8
=head1 NAME
Data::UUID::MT - Fast random UUID generator using the Mersenne Twister algorithm
=head1 VERSION
version 1.001
=head1 SYNOPSIS
use Data::UUID::MT;
my $ug1 = Data::UUID::MT->new( version => 4 ); # "1", "4" or "4s"
my $ug2 = Data::UUID::MT->new(); # default is "4"
# method interface
my $uuid1 = $ug->create(); # 16 byte binary string
my $uuid2 = $ug->create_hex();
my $uuid3 = $ug->create_string();
# iterator -- avoids some method call overhead
my $next = $ug->iterator;
my $uuid4 = $next->();
=head1 DESCRIPTION
This UUID generator uses the excellent L<Math::Random::MT::Auto> module
as a source of fast, high-quality (pseudo) random numbers.
Three different types of UUIDs are supported. Two are consistent with
RFC 4122 and one is a custom variant that provides a 'sequential UUID'
that can be advantageous when used as a primary database key.
B<Note>: The Mersenne Twister pseudo-random number generator has excellent
statistical properties, but it is not considered cryptographically secure.
Pseudo-random UUIDs are not recommended for use as security authentication
tokens in cookies or other user-visible session identifiers.
=head2 Version 1 UUIDs
The UUID generally follows the "version 1" spec from the RFC, however the clock
sequence and MAC address are randomly generated each time. (This is
permissible within the spec of the RFC.) The generated MAC address has the
the multicast bit set as mandated by the RFC to ensure it does not
conflict with real MAC addresses. This UUID has 60 bits of timestamp data,
61 bits of pseudo-random data and 7 mandated bits (multicast bit, "variant"
field and "version" field).
=head2 Version 4 UUIDs
The UUID follows the "version 4" spec, with 122 pseudo-random bits and
6 mandated bits ("variant" field and "version" field).
=head2 Version 4s UUIDs
This is a custom UUID form that resembles "version 4" form, but that overlays
the first 60 bits with a timestamp akin to "version 1", Unlike "version 1",
this custom version preserves the ordering of bits from high to low, whereas
"version 1" puts the low 32 bits of the timestamp first, then the middle 16
bits, then multiplexes the high bits with version field. This "4s" variant
provides a "sequential UUID" with the timestamp providing order and the
remaining random bits making collision with other UUIDs created at the exact
same microsecond highly unlikely. This UUID has 60 timestamp bits, 62
pseudo-random bits and 6 mandated bits ("variant" field and "version" field).
=head2 Unsupported: Versions 2, 3 and 5
This module focuses on generation of UUIDs with random elements and does not
support UUID versions 2, 3 and 5.
=head1 METHODS
=head2 new
my $ug = Data::UUID::MT->new( version => 4 );
Creates a UUID generator object. The only allowed versions are
"1", "4" and "4s". If no version is specified, it defaults to "4".
=head2 create
my $uuid = $ug->create;
Returns a UUID packed into a 16 byte string.
=head2 create_hex
my $uuid = $ug->create_hex();
Returns a UUID as a lowercase hex string, prefixed with "0x", e.g.
C<0xb0470602a64b11da863293ebf1c0e05a>
=head2 create_string
my $uuid = $ug->create_string(); #
Returns UUID as a lowercase string in "standard" format, e.g.
C<b0470602-a64b-11da-8632-93ebf1c0e05a>
=head2 iterator
my $next = $ug->iterator;
my $uuid = $next->();
Returns a reference to the internal UUID generator function. Because this
avoids method call overhead, it is slightly faster than calling C<create>.
=head2 reseed
$ug->reseed;
Reseeds the internal pseudo-random number generator. This happens
automatically after a fork or thread creation (assuming Scalar::Util::weaken),
but may be called manually if desired for some reason.
Any arguments provided are passed to Math::Random::MT::Auto::srand() for
( run in 1.196 second using v1.01-cache-2.11-cpan-5b529ec07f3 )