run:R W Run
DIR
2026-04-08 19:48:03
R W Run
141 By
2026-04-08 19:32:05
R W Run
46.84 KB
2026-04-08 19:32:05
R W Run
1.07 KB
2026-04-08 19:32:05
R W Run
2.82 KB
2026-04-08 19:32:06
R W Run
error_log
📄CHANGELOG.md
1# ramsey/uuid Changelog
2
3All notable changes to this project will be documented in this file.
4
5The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
6and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
8
9## [Unreleased]
10
11### Added
12
13### Changed
14
15### Deprecated
16
17### Removed
18
19### Fixed
20
21### Security
22
23
24## [4.0.1] - 2020-03-29
25
26### Fixed
27
28* Fix collection deserialization errors due to upstream `allowed_classes` being
29 set to `false`. For details, see [ramsey/uuid#303](https://github.com/ramsey/uuid/issues/303)
30 and [ramsey/collection#47](https://github.com/ramsey/collection/issues/47).
31
32
33## [4.0.0] - 2020-03-22
34
35### Added
36
37* Add support for version 6 UUIDs, as defined by <http://gh.peabody.io/uuidv6/>,
38 including the static method `Uuid::uuid6()`, which returns a
39 `Nonstandard\UuidV6` instance.
40* Add ability to generate version 2 (DCE Security) UUIDs, including the static
41 method `Uuid::uuid2()`, which returns an `Rfc4122\UuidV2` instance.
42* Add classes to represent each version of RFC 4122 UUID. When generating new
43 UUIDs or creating UUIDs from existing strings, bytes, or integers, if the UUID
44 is an RFC 4122 variant, one of these instances will be returned:
45 * `Rfc4122\UuidV1`
46 * `Rfc4122\UuidV2`
47 * `Rfc4122\UuidV3`
48 * `Rfc4122\UuidV4`
49 * `Rfc4122\UuidV5`
50 * `Rfc4122\NilUuid`
51* Add classes to represent version 6 UUIDs, GUIDs, and nonstandard
52 (non-RFC 4122 variant) UUIDs:
53 * `Nonstandard\UuidV6`
54 * `Guid\Guid`
55 * `Nonstandard\Uuid`
56* Add `Uuid::fromDateTime()` to create version 1 UUIDs from instances of
57 `\DateTimeInterface`.
58* The `\DateTimeInterface` instance returned by `UuidInterface::getDateTime()`
59 (and now `Rfc4122\UuidV1::getDateTime()`) now includes microseconds, as
60 specified by the version 1 UUID.
61* Add `Validator\ValidatorInterface` and `Validator\GenericValidator` to allow
62 flexibility in validating UUIDs/GUIDs.
63 * The default validator continues to validate UUID strings using the same
64 relaxed validation pattern found in the 3.x series of ramsey/uuid.
65 * Introduce `Rfc4122\Validator` that may be used for strict validation of
66 RFC 4122 UUID strings.
67 * Add ability to change the default validator used by `Uuid` through
68 `FeatureSet::setValidator()`.
69 * Add `getValidator()` and `setValidator()` to `UuidFactory`.
70* Add `Provider\Node\StaticNodeProvider` to assist in setting a custom static
71 node value with the multicast bit set for version 1 UUIDs.
72* Add the following new exceptions:
73 * `Exception\BuilderNotFoundException` -
74 Thrown to indicate that no suitable UUID builder could be found.
75 * `Exception\DateTimeException` -
76 Thrown to indicate that the PHP DateTime extension encountered an
77 exception/error.
78 * `Exception\DceSecurityException` -
79 Thrown to indicate an exception occurred while dealing with DCE Security
80 (version 2) UUIDs.
81 * `Exception\InvalidArgumentException` -
82 Thrown to indicate that the argument received is not valid. This extends the
83 built-in PHP `\InvalidArgumentException`, so there should be no BC breaks
84 with ramsey/uuid throwing this exception, if you are catching the PHP
85 exception.
86 * `Exception\InvalidBytesException` -
87 Thrown to indicate that the bytes being operated on are invalid in some way.
88 * `Exception\NameException` -
89 Thrown to indicate that an error occurred while attempting to hash a
90 namespace and name.
91 * `Exception\NodeException` -
92 Throw to indicate that attempting to fetch or create a node ID encountered
93 an error.
94 * `Exception\RandomSourceException` -
95 Thrown to indicate that the source of random data encountered an error.
96 * `Exception\TimeSourceException` -
97 Thrown to indicate that the source of time encountered an error.
98 * `Exception\UnableToBuildUuidException` -
99 Thrown to indicate a builder is unable to build a UUID.
100* Introduce a `Builder\FallbackBuilder`, used by `FeatureSet` to help decide
101 whether to return a `Uuid` or `Nonstandard\Uuid` when decoding a
102 UUID string or bytes.
103* Add `Rfc4122\UuidInterface` to specifically represent RFC 4122 variant UUIDs.
104* Add `Rfc4122\UuidBuilder` to build RFC 4122 variant UUIDs. This replaces the
105 existing `Builder\DefaultUuidBuilder`, which is now deprecated.
106* Introduce `Math\CalculatorInterface` for representing calculators to perform
107 arithmetic operations on integers.
108* Depend on [brick/math](https://github.com/brick/math) for the
109 `Math\BrickMathCalculator`, which is the default calculator used by this
110 library when math cannot be performed in native PHP due to integer size
111 limitations. The calculator is configurable and may be changed, if desired.
112* Add `Converter\Number\GenericNumberConverter` and
113 `Converter\Time\GenericTimeConverter` which will use the calculator provided
114 to convert numbers and time to values for UUIDs.
115* Introduce `Type\Hexadecimal`, `Type\Integer`, `Type\Decimal`, and `Type\Time`
116 for improved type-safety when dealing with arbitrary string values.
117* Add a `Type\TypeInterface` that each of the ramsey/uuid types implements.
118* Add `Fields\FieldsInterface` and `Rfc4122\FieldsInterface` to define
119 field layouts for UUID variants. The implementations `Rfc4122\Fields`,
120 `Guid\Fields`, and `Nonstandard\Fields` store the 16-byte,
121 binary string representation of the UUID internally, and these manage
122 conversion of the binary string into the hexadecimal field values.
123* Introduce `Builder\BuilderCollection` and `Provider\Node\NodeProviderCollection`.
124 These are typed collections for providing builders and node providers to
125 `Builder\FallbackBuilder` and `Provider\Node\FallbackNodeProvider`, respectively.
126* Add `Generator\NameGeneratorInterface` to support alternate methods of
127 generating bytes for version 3 and version 5 name-based UUID. By default,
128 ramsey/uuid uses the `Generator\DefaultNameGenerator`, which uses the standard
129 algorithm this library has used since the beginning. You may choose to use the
130 new `Generator\PeclUuidNameGenerator` to make use of the new
131 `uuid_generate_md5()` and `uuid_generate_sha1()` functions in
132 [ext-uuid version 1.1.0](https://pecl.php.net/package/uuid).
133
134### Changed
135
136* Set minimum required PHP version to 7.2.
137* This library now works on 32-bit and 64-bit systems, with no degradation in
138 functionality.
139* By default, the following static methods will now return specific instance
140 types. This should not cause any BC breaks if typehints target `UuidInterface`:
141 * `Uuid::uuid1` returns `Rfc4122\UuidV1`
142 * `Uuid::uuid3` returns `Rfc4122\UuidV3`
143 * `Uuid::uuid4` returns `Rfc4122\UuidV4`
144 * `Uuid::uuid5` returns `Rfc4122\UuidV5`
145* Accept `Type\Hexadecimal` for the `$node` parameter for
146 `UuidFactoryInterface::uuid1()`. This is in addition to the `int|string` types
147 already accepted, so there are no BC breaks. `Type\Hexadecimal` is now the
148 recommended type to pass for `$node`.
149* Out of the box, `Uuid::fromString()`, `Uuid::fromBytes()`, and
150 `Uuid::fromInteger()` will now return either an `Rfc4122\UuidInterface`
151 instance or an instance of `Nonstandard\Uuid`, depending on whether the input
152 contains an RFC 4122 variant UUID with a valid version identifier. Both
153 implement `UuidInterface`, so BC breaks should not occur if typehints use the
154 interface.
155* Change `Uuid::getFields()` to return an instance of `Fields\FieldsInterface`.
156 Previously, it returned an array of integer values (on 64-bit systems only).
157* `Uuid::getDateTime()` now returns an instance of `\DateTimeImmutable` instead
158 of `\DateTime`.
159* Make the following changes to `UuidInterface`:
160 * `getHex()` now returns a `Type\Hexadecimal` instance.
161 * `getInteger()` now returns a `Type\Integer` instance. The `Type\Integer`
162 instance holds a string representation of a 128-bit integer. You may then
163 use a math library of your choice (bcmath, gmp, etc.) to operate on the
164 string integer.
165 * `getDateTime()` now returns `\DateTimeInterface` instead of `\DateTime`.
166 * Add `__toString()` method.
167 * Add `getFields()` method. It returns an instance of `Fields\FieldsInterface`.
168* Add the following new methods to `UuidFactoryInterface`:
169 * `uuid2()`
170 * `uuid6()`
171 * `fromDateTime()`
172 * `fromInteger()`
173 * `getValidator()`
174* This library no longer throws generic exceptions. However, this should not
175 result in BC breaks, since the new exceptions extend from built-in PHP
176 exceptions that this library previously threw.
177 * `Exception\UnsupportedOperationException` is now descended from
178 `\LogicException`. Previously, it descended from `\RuntimeException`.
179* Change required constructor parameters for `Uuid`:
180 * Change the first required constructor parameter for `Uuid` from
181 `array $fields` to `Rfc4122\FieldsInterface $fields`.
182 * Add `Converter\TimeConverterInterface $timeConverter` as the fourth
183 required constructor parameter for `Uuid`.
184* Change the second required parameter of `Builder\UuidBuilderInterface::build()`
185 from `array $fields` to `string $bytes`. Rather than accepting an array of
186 hexadecimal strings as UUID fields, the `build()` method now expects a byte
187 string.
188* Add `Converter\TimeConverterInterface $timeConverter` as the second required
189 constructor parameter for `Rfc4122\UuidBuilder`. This also affects the
190 now-deprecated `Builder\DefaultUuidBuilder`, since this class now inherits
191 from `Rfc4122\UuidBuilder`.
192* Add `convertTime()` method to `Converter\TimeConverterInterface`.
193* Add `getTime()` method to `Provider\TimeProviderInterface`. It replaces the
194 `currentTime()` method.
195* `Provider\Node\FallbackNodeProvider` now accepts only a
196 `Provider\Node\NodeProviderCollection` as its constructor parameter.
197* `Provider\Time\FixedTimeProvider` no longer accepts an array but accepts only
198 `Type\Time` instances.
199* `Provider\NodeProviderInterface::getNode()` now returns `Type\Hexadecimal`
200 instead of `string|false|null`.
201* `Converter/TimeConverterInterface::calculateTime()` now returns
202 `Type\Hexadecimal` instead of `array`. The value is the full UUID timestamp
203 value (count of 100-nanosecond intervals since the Gregorian calendar epoch)
204 in hexadecimal format.
205* Change methods in `NumberConverterInterface` to accept and return string values
206 instead of `mixed`; this simplifies the interface and makes it consistent.
207* `Generator\DefaultTimeGenerator` no longer adds the variant and version bits
208 to the bytes it returns. These must be applied to the bytes afterwards.
209* When encoding to bytes or decoding from bytes, `OrderedTimeCodec` now checks
210 whether the UUID is an RFC 4122 variant, version 1 UUID. If not, it will throw
211 an exception—`InvalidArgumentException` when using
212 `OrderedTimeCodec::encodeBinary()` and `UnsupportedOperationException` when
213 using `OrderedTimeCodec::decodeBytes()`.
214
215### Deprecated
216
217The following functionality is deprecated and will be removed in ramsey/uuid
2185.0.0.
219
220* The following methods from `UuidInterface` and `Uuid` are deprecated. Use their
221 counterparts on the `Rfc4122\FieldsInterface` returned by `Uuid::getFields()`.
222 * `getClockSeqHiAndReservedHex()`
223 * `getClockSeqLowHex()`
224 * `getClockSequenceHex()`
225 * `getFieldsHex()`
226 * `getNodeHex()`
227 * `getTimeHiAndVersionHex()`
228 * `getTimeLowHex()`
229 * `getTimeMidHex()`
230 * `getTimestampHex()`
231 * `getVariant()`
232 * `getVersion()`
233* The following methods from `Uuid` are deprecated. Use the `Rfc4122\FieldsInterface`
234 instance returned by `Uuid::getFields()` to get the `Type\Hexadecimal` value
235 for these fields. You may use the new `Math\CalculatorInterface::toIntegerValue()`
236 method to convert the `Type\Hexadecimal` instances to instances of
237 `Type\Integer`. This library provides `Math\BrickMathCalculator`, which may be
238 used for this purpose, or you may use the arbitrary-precision arithemetic
239 library of your choice.
240 * `getClockSeqHiAndReserved()`
241 * `getClockSeqLow()`
242 * `getClockSequence()`
243 * `getNode()`
244 * `getTimeHiAndVersion()`
245 * `getTimeLow()`
246 * `getTimeMid()`
247 * `getTimestamp()`
248* `getDateTime()` on `UuidInterface` and `Uuid` is deprecated. Use this method
249 only on instances of `Rfc4122\UuidV1` or `Nonstandard\UuidV6`.
250* `getUrn()` on `UuidInterface` and `Uuid` is deprecated. It is available on
251 `Rfc4122\UuidInterface` and classes that implement it.
252* The following methods are deprecated and have no direct replacements. However,
253 you may obtain the same information by calling `UuidInterface::getHex()` and
254 splitting the return value in half.
255 * `UuidInterface::getLeastSignificantBitsHex()`
256 * `UuidInterface::getMostSignificantBitsHex()`
257 * `Uuid::getLeastSignificantBitsHex()`
258 * `Uuid::getMostSignificantBitsHex()`
259 * `Uuid::getLeastSignificantBits()`
260 * `Uuid::getMostSignificantBits()`
261* `UuidInterface::getNumberConverter()` and `Uuid::getNumberConverter()` are
262 deprecated. There is no alternative recommendation, so plan accordingly.
263* `Builder\DefaultUuidBuilder` is deprecated; transition to `Rfc4122\UuidBuilder`.
264* `Converter\Number\BigNumberConverter` is deprecated; transition to
265 `Converter\Number\GenericNumberConverter`.
266* `Converter\Time\BigNumberTimeConverter` is deprecated; transition to
267 `Converter\Time\GenericTimeConverter`.
268* The classes for representing and generating *degraded* UUIDs are deprecated.
269 These are no longer necessary; this library now behaves the same on 32-bit and
270 64-bit systems.
271 * `Builder\DegradedUuidBuilder`
272 * `Converter\Number\DegradedNumberConverter`
273 * `Converter\Time\DegradedTimeConverter`
274 * `DegradedUuid`
275* The `Uuid::UUID_TYPE_IDENTIFIER` constant is deprecated. Use
276 `Uuid::UUID_TYPE_DCE_SECURITY` instead.
277* The `Uuid::VALID_PATTERN` constant is deprecated. Use
278 `Validator\GenericValidator::getPattern()` or `Rfc4122\Validator::getPattern()`
279 instead.
280
281### Removed
282
283* Remove the following bytes generators and recommend
284 `Generator\RandomBytesGenerator` as a suitable replacement:
285 * `Generator\MtRandGenerator`
286 * `Generator\OpenSslGenerator`
287 * `Generator\SodiumRandomGenerator`
288* Remove `Exception\UnsatisfiedDependencyException`. This library no longer
289 throws this exception.
290* Remove the method `Provider\TimeProviderInterface::currentTime()`. Use
291 `Provider\TimeProviderInterface::getTime()` instead.
292
293
294## [4.0.0-beta2] - 2020-03-01
295
296## Added
297
298* Add missing convenience methods for `Rfc4122\UuidV2`.
299* Add `Provider\Node\StaticNodeProvider` to assist in setting a custom static
300 node value with the multicast bit set for version 1 UUIDs.
301
302## Changed
303
304* `Provider\NodeProviderInterface::getNode()` now returns `Type\Hexadecimal`
305 instead of `string|false|null`.
306
307
308## [4.0.0-beta1] - 2020-02-27
309
310### Added
311
312* Add `ValidatorInterface::getPattern()` to return the regular expression
313 pattern used by the validator.
314* Add `v6()` helper function for version 6 UUIDs.
315
316### Changed
317
318* Set the pattern constants on validators as `private`. Use the `getPattern()`
319 method instead.
320* Change the `$node` parameter for `UuidFactoryInterface::uuid6()` to accept
321 `null` or `Type\Hexadecimal`.
322* Accept `Type\Hexadecimal` for the `$node` parameter for
323 `UuidFactoryInterface::uuid1()`. This is in addition to the `int|string` types
324 already accepted, so there are no BC breaks. `Type\Hexadecimal` is now the
325 recommended type to pass for `$node`.
326
327### Removed
328
329* Remove `currentTime()` method from `Provider\Time\FixedTimeProvider` and
330 `Provider\Time\SystemTimeProvider`; it had previously been removed from
331 `Provider\TimeProviderInterface`.
332
333
334## [4.0.0-alpha5] - 2020-02-23
335
336### Added
337
338* Introduce `Builder\BuilderCollection` and `Provider\Node\NodeProviderCollection`.
339
340### Changed
341
342* `Builder\FallbackBuilder` now accepts only a `Builder\BuilderCollection` as
343 its constructor parameter.
344* `Provider\Node\FallbackNodeProvider` now accepts only a `Provider\Node\NodeProviderCollection`
345 as its constructor parameter.
346* `Provider\Time\FixedTimeProvider` no longer accepts an array but accepts only
347 `Type\Time` instances.
348
349
350## [4.0.0-alpha4] - 2020-02-23
351
352### Added
353
354* Add a `Type\TypeInterface` that each of the ramsey/uuid types implements.
355* Support version 6 UUIDs; see <http://gh.peabody.io/uuidv6/>.
356
357### Changed
358
359* Rename `Type\IntegerValue` to `Type\Integer`. It was originally named
360 `IntegerValue` because static analysis sees `Integer` in docblock annotations
361 and treats it as the native `int` type. `Integer` is not a reserved word in
362 PHP, so it should be named `Integer` for consistency with other types in this
363 library. When using it, a class alias prevents static analysis from
364 complaining.
365* Mark `Guid\Guid` and `Nonstandard\Uuid` classes as `final`.
366* Add `uuid6()` method to `UuidFactoryInterface`.
367
368### Deprecated
369
370* `Uuid::UUID_TYPE_IDENTIFIER` is deprecated. Use `Uuid::UUID_TYPE_DCE_SECURITY`
371 instead.
372* `Uuid::VALID_PATTERN` is deprecated. Use `Validator\GenericValidator::VALID_PATTERN`
373 instead.
374
375
376## [4.0.0-alpha3] - 2020-02-21
377
378### Fixed
379
380* Fix microsecond rounding error on 32-bit systems.
381
382
383## [4.0.0-alpha2] - 2020-02-21
384
385### Added
386
387* Add `Uuid::fromDateTime()` to create version 1 UUIDs from instances of
388 `\DateTimeInterface`.
389* Add `Generator\NameGeneratorInterface` to support alternate methods of
390 generating bytes for version 3 and version 5 name-based UUID. By default,
391 ramsey/uuid uses the `Generator\DefaultNameGenerator`, which uses the standard
392 algorithm this library has used since the beginning. You may choose to use the
393 new `Generator\PeclUuidNameGenerator` to make use of the new
394 `uuid_generate_md5()` and `uuid_generate_sha1()` functions in ext-uuid version
395 1.1.0.
396
397### Changed
398
399* Add `fromDateTime()` method to `UuidFactoryInterface`.
400* Change `UuidInterface::getHex()` to return a `Ramsey\Uuid\Type\Hexadecimal` instance.
401* Change `UuidInterface::getInteger()` to return a `Ramsey\Uuid\Type\IntegerValue` instance.
402
403### Fixed
404
405* Round microseconds to six digits when getting DateTime from v1 UUIDs. This
406 circumvents a needless exception for an otherwise valid time-based UUID.
407
408
409## [4.0.0-alpha1] - 2020-01-22
410
411### Added
412
413* Add `Validator\ValidatorInterface` and `Validator\GenericValidator` to allow
414 flexibility in validating UUIDs/GUIDs.
415 * Add ability to change the default validator used by `Uuid` through
416 `FeatureSet::setValidator()`.
417 * Add `getValidator()` and `setValidator()` to `UuidFactory`.
418* Add an internal `InvalidArgumentException` that descends from the built-in
419 PHP `\InvalidArgumentException`. All places that used to throw
420 `\InvalidArgumentException` now throw `Ramsey\Uuid\Exception\InvalidArgumentException`.
421 This should not cause any BC breaks, however.
422* Add an internal `DateTimeException` that descends from the built-in PHP
423 `\RuntimeException`. `Uuid::getDateTime()` may throw this exception if
424 `\DateTimeImmutable` throws an error or exception.
425* Add `RandomSourceException` that descends from the built-in PHP
426 `\RuntimeException`. `DefaultTimeGenerator`, `RandomBytesGenerator`, and
427 `RandomNodeProvider` may throw this exception if `random_bytes()` or
428 `random_int()` throw an error or exception.
429* Add `Fields\FieldsInterface` and `Rfc4122\FieldsInterface` to define
430 field layouts for UUID variants. The implementations `Rfc4122\Fields`,
431 `Guid\Fields`, and `Nonstandard\Fields` store the 16-byte,
432 binary string representation of the UUID internally, and these manage
433 conversion of the binary string into the hexadecimal field values.
434* Add `Rfc4122\UuidInterface` to specifically represent RFC 4122 variant UUIDs.
435* Add classes to represent each version of RFC 4122 UUID. When generating new
436 UUIDs or creating UUIDs from existing strings, bytes, or integers, if the UUID
437 is an RFC 4122 variant, one of these instances will be returned:
438 * `Rfc4122\UuidV1`
439 * `Rfc4122\UuidV2`
440 * `Rfc4122\UuidV3`
441 * `Rfc4122\UuidV4`
442 * `Rfc4122\UuidV5`
443 * `Rfc4122\NilUuid`
444* Add `Rfc4122\UuidBuilder` to build RFC 4122 variant UUIDs. This replaces the
445 existing `Builder\DefaultUuidBuilder`, which is now deprecated.
446* Add ability to generate version 2 (DCE Security) UUIDs, including the static
447 method `Uuid::uuid2()`, which returns an `Rfc4122\UuidV2` instance.
448* Add classes to represent GUIDs and nonstandard (non-RFC 4122 variant) UUIDs:
449 * `Guid\Guid`
450 * `Nonstandard\Uuid`.
451* Introduce a `Builder\FallbackBuilder`, used by `FeatureSet` to help decide
452 whether to return a `Uuid` or `Nonstandard\Uuid` when decoding a
453 UUID string or bytes.
454* Introduce `Type\Hexadecimal`, `Type\IntegerValue`, and `Type\Time` for
455 improved type-safety when dealing with arbitrary string values.
456* Introduce `Math\CalculatorInterface` for representing calculators to perform
457 arithmetic operations on integers.
458* Depend on [brick/math](https://github.com/brick/math) for the
459 `Math\BrickMathCalculator`, which is the default calculator used by this
460 library when math cannot be performed in native PHP due to integer size
461 limitations. The calculator is configurable and may be changed, if desired.
462* Add `Converter\Number\GenericNumberConverter` and
463 `Converter\Time\GenericTimeConverter` which will use the calculator provided
464 to convert numbers and time to values for UUIDs.
465* The `\DateTimeInterface` instance returned by `UuidInterface::getDateTime()`
466 (and now `Rfc4122\UuidV1::getDateTime()`) now includes microseconds, as
467 specified by the version 1 UUID.
468
469### Changed
470
471* Set minimum required PHP version to 7.2.
472* Add `__toString()` method to `UuidInterface`.
473* The `UuidInterface::getDateTime()` method now specifies `\DateTimeInterface`
474 as the return value, rather than `\DateTime`; `Uuid::getDateTime()` now
475 returns an instance of `\DateTimeImmutable` instead of `\DateTime`.
476* Add `getFields()` method to `UuidInterface`.
477* Add `getValidator()` method to `UuidFactoryInterface`.
478* Add `uuid2()` method to `UuidFactoryInterface`.
479* Add `convertTime()` method to `Converter\TimeConverterInterface`.
480* Add `getTime()` method to `Provider\TimeProviderInterface`.
481* Change `Uuid::getFields()` to return an instance of `Fields\FieldsInterface`.
482 Previously, it returned an array of integer values (on 64-bit systems only).
483* Change the first required constructor parameter for `Uuid` from
484 `array $fields` to `Rfc4122\FieldsInterface $fields`.
485* Introduce `Converter\TimeConverterInterface $timeConverter` as fourth required
486 constructor parameter for `Uuid` and second required constructor parameter for
487 `Builder\DefaultUuidBuilder`.
488* Change `UuidInterface::getInteger()` to always return a `string` value instead
489 of `mixed`. This is a string representation of a 128-bit integer. You may then
490 use a math library of your choice (bcmath, gmp, etc.) to operate on the
491 string integer.
492* Change the second required parameter of `Builder\UuidBuilderInterface::build()`
493 from `array $fields` to `string $bytes`. Rather than accepting an array of
494 hexadecimal strings as UUID fields, the `build()` method now expects a byte
495 string.
496* `Generator\DefaultTimeGenerator` no longer adds the variant and version bits
497 to the bytes it returns. These must be applied to the bytes afterwards.
498* `Converter/TimeConverterInterface::calculateTime()` now returns
499 `Type\Hexadecimal` instead of `array`. The value is the full UUID timestamp
500 value (count of 100-nanosecond intervals since the Gregorian calendar epoch)
501 in hexadecimal format.
502* Change methods in converter interfaces to accept and return string values
503 instead of `mixed`; this simplifies the interface and makes it consistent:
504 * `NumberConverterInterface::fromHex(string $hex): string`
505 * `NumberConverterInterface::toHex(string $number): string`
506 * `TimeConverterInterface::calculateTime(string $seconds, string $microseconds): array`
507* `UnsupportedOperationException` is now descended from `\LogicException`.
508 Previously, it descended from `\RuntimeException`.
509* When encoding to bytes or decoding from bytes, `OrderedTimeCodec` now checks
510 whether the UUID is an RFC 4122 variant, version 1 UUID. If not, it will throw
511 an exception—`InvalidArgumentException` when using
512 `OrderedTimeCodec::encodeBinary()` and `UnsupportedOperationException` when
513 using `OrderedTimeCodec::decodeBytes()`.
514* Out of the box, `Uuid::fromString()`, `Uuid::fromBytes()`, and
515 `Uuid::fromInteger()` will now return either an `Rfc4122\UuidInterface`
516 instance or an instance of `Nonstandard\Uuid`, depending on whether the input
517 contains an RFC 4122 variant UUID with a valid version identifier. Both
518 implement `UuidInterface`, so BC breaks should not occur if typehints use the
519 interface.
520* By default, the following static methods will now return the specific instance
521 types. This should not cause any BC breaks if typehints target `UuidInterface`:
522 * `Uuid::uuid1` returns `Rfc4122\UuidV1`
523 * `Uuid::uuid3` returns `Rfc4122\UuidV3`
524 * `Uuid::uuid4` returns `Rfc4122\UuidV4`
525 * `Uuid::uuid5` returns `Rfc4122\UuidV5`
526
527### Deprecated
528
529The following functionality is deprecated and will be removed in ramsey/uuid
5305.0.0.
531
532* The following methods from `UuidInterface` and `Uuid` are deprecated. Use their
533 counterparts on the `Rfc4122\FieldsInterface` returned by `Uuid::getFields()`.
534 * `getClockSeqHiAndReservedHex()`
535 * `getClockSeqLowHex()`
536 * `getClockSequenceHex()`
537 * `getFieldsHex()`
538 * `getNodeHex()`
539 * `getTimeHiAndVersionHex()`
540 * `getTimeLowHex()`
541 * `getTimeMidHex()`
542 * `getTimestampHex()`
543 * `getVariant()`
544 * `getVersion()`
545* The following methods from `Uuid` are deprecated. Use the `Rfc4122\FieldsInterface`
546 instance returned by `Uuid::getFields()` to get the `Type\Hexadecimal` value
547 for these fields, and then use the arbitrary-precision arithmetic library of
548 your choice to convert them to string integers.
549 * `getClockSeqHiAndReserved()`
550 * `getClockSeqLow()`
551 * `getClockSequence()`
552 * `getNode()`
553 * `getTimeHiAndVersion()`
554 * `getTimeLow()`
555 * `getTimeMid()`
556 * `getTimestamp()`
557* `getDateTime()` on `UuidInterface` and `Uuid` is deprecated. Use this method
558 only on instances of `Rfc4122\UuidV1`.
559* `getUrn()` on `UuidInterface` and `Uuid` is deprecated. It is available on
560 `Rfc4122\UuidInterface` and classes that implement it.
561* The following methods are deprecated and have no direct replacements. However,
562 you may obtain the same information by calling `UuidInterface::getHex()` and
563 splitting the return value in half.
564 * `UuidInterface::getLeastSignificantBitsHex()`
565 * `UuidInterface::getMostSignificantBitsHex()`
566 * `Uuid::getLeastSignificantBitsHex()`
567 * `Uuid::getMostSignificantBitsHex()`
568 * `Uuid::getLeastSignificantBits()`
569 * `Uuid::getMostSignificantBits()`
570* `UuidInterface::getNumberConverter()` and `Uuid::getNumberConverter()` are
571 deprecated. There is no alternative recommendation, so plan accordingly.
572* `Builder\DefaultUuidBuilder` is deprecated; transition to
573 `Rfc4122\UuidBuilder`.
574* `Converter\Number\BigNumberConverter` is deprecated; transition to
575 `Converter\Number\GenericNumberConverter`.
576* `Converter\Time\BigNumberTimeConverter` is deprecated; transition to
577 `Converter\Time\GenericTimeConverter`.
578* `Provider\TimeProviderInterface::currentTime()` is deprecated; transition to
579 the `getTimestamp()` method on the same interface.
580* The classes for representing and generating *degraded* UUIDs are deprecated.
581 These are no longer necessary; this library now behaves the same on 32-bit and
582 64-bit PHP.
583 * `Builder\DegradedUuidBuilder`
584 * `Converter\Number\DegradedNumberConverter`
585 * `Converter\Time\DegradedTimeConverter`
586 * `DegradedUuid`
587
588### Removed
589
590* Remove the following bytes generators and recommend
591 `Generator\RandomBytesGenerator` as a suitable replacement:
592 * `Generator\MtRandGenerator`
593 * `Generator\OpenSslGenerator`
594 * `Generator\SodiumRandomGenerator`
595* Remove `Exception\UnsatisfiedDependencyException`. This library no longer
596 throws this exception.
597
598
599## [3.9.3] - 2020-02-20
600
601### Fixed
602
603* For v1 UUIDs, round down for timestamps so that microseconds do not bump the
604 timestamp to the next second.
605
606 As an example, consider the case of timestamp `1` with `600000` microseconds
607 (`1.600000`). This is the first second after midnight on January 1, 1970, UTC.
608 Previous versions of this library had a bug that would round this to `2`, so
609 the rendered time was `1970-01-01 00:00:02`. This was incorrect. Despite
610 having `600000` microseconds, the time should not round up to the next second.
611 Rather, the time should be `1970-01-01 00:00:01.600000`. Since this version of
612 ramsey/uuid does not support microseconds, the microseconds are dropped, and
613 the time is `1970-01-01 00:00:01`. No rounding should occur.
614
615
616## [3.9.2] - 2019-12-17
617
618### Fixed
619
620* Check whether files returned by `/sys/class/net/*/address` are readable
621 before attempting to read them. This avoids a PHP warning that was being
622 emitted on hosts that do not grant permission to read these files.
623
624
625## [3.9.1] - 2019-12-01
626
627### Fixed
628
629* Fix `RandomNodeProvider` behavior on 32-bit systems. The `RandomNodeProvider`
630 was converting a 6-byte string to a decimal number, which is a 48-bit,
631 unsigned integer. This caused problems on 32-bit systems and has now been
632 resolved.
633
634
635## [3.9.0] - 2019-11-30
636
637### Added
638
639* Add function API as convenience. The functions are available in the
640 `Ramsey\Uuid` namespace.
641 * `v1(int|string|null $node = null, int|null $clockSeq = null): string`
642 * `v3(string|UuidInterface $ns, string $name): string`
643 * `v4(): string`
644 * `v5(string|UuidInterface $ns, string $name): string`
645
646### Changed
647
648* Use paragonie/random-lib instead of ircmaxell/random-lib. This is a
649 non-breaking change.
650* Use a high-strength generator by default, when using `RandomLibAdapter`. This
651 is a non-breaking change.
652
653### Deprecated
654
655These will be removed in ramsey/uuid version 4.0.0:
656
657* `MtRandGenerator`, `OpenSslGenerator`, and `SodiumRandomGenerator` are
658 deprecated in favor of using the default `RandomBytesGenerator`.
659
660### Fixed
661
662* Set `ext-json` as a required dependency in `composer.json`.
663* Use `PHP_OS` instead of `php_uname()` when determining the system OS, for
664 cases when `php_uname()` is disabled for security reasons.
665
666
667## [3.8.0] - 2018-07-19
668
669### Added
670
671* Support discovery of MAC addresses on FreeBSD systems
672* Use a polyfill to provide PHP ctype functions when running on systems where the
673 ctype functions are not part of the PHP build
674* Disallow a trailing newline character when validating UUIDs
675* Annotate thrown exceptions for improved IDE hinting
676
677
678## [3.7.3] - 2018-01-19
679
680### Fixed
681
682* Gracefully handle cases where `glob()` returns false when searching
683 `/sys/class/net/*/address` files on Linux
684* Fix off-by-one error in `DefaultTimeGenerator`
685
686### Security
687
688* Switch to `random_int()` from `mt_rand()` for better random numbers
689
690
691## [3.7.2] - 2018-01-13
692
693### Fixed
694
695* Check sysfs on Linux to determine the node identifier; this provides a
696 reliable way to identify the node on Docker images, etc.
697
698
699## [3.7.1] - 2017-09-22
700
701### Fixed
702
703* Set the multicast bit for random nodes, according to RFC 4122, §4.5
704
705### Security
706
707* Use `random_bytes()` when generating random nodes
708
709
710## [3.7.0] - 2017-08-04
711
712### Added
713
714* Add the following UUID version constants:
715 * `Uuid::UUID_TYPE_TIME`
716 * `Uuid::UUID_TYPE_IDENTIFIER`
717 * `Uuid::UUID_TYPE_HASH_MD5`
718 * `Uuid::UUID_TYPE_RANDOM`
719 * `Uuid::UUID_TYPE_HASH_SHA1`
720
721
722## [3.6.1] - 2017-03-26
723
724### Fixed
725
726* Optimize UUID string decoding by using `str_pad()` instead of `sprintf()`
727
728
729## [3.6.0] - 2017-03-18
730
731### Added
732
733* Add `InvalidUuidStringException`, which is thrown when attempting to decode an
734 invalid string UUID; this does not introduce any BC issues, since the new
735 exception inherits from the previously used `InvalidArgumentException`
736
737### Fixed
738
739* Improve memory usage when generating large quantities of UUIDs (use `str_pad()`
740 and `dechex()` instead of `sprintf()`)
741
742
743## [3.5.2] - 2016-11-22
744
745### Fixed
746
747* Improve test coverage
748
749
750## [3.5.1] - 2016-10-02
751
752### Fixed
753
754* Fix issue where the same UUIDs were not being treated as equal when using
755 mixed cases
756
757
758## [3.5.0] - 2016-08-02
759
760### Added
761
762* Add `OrderedTimeCodec` to store UUID in an optimized way for InnoDB
763
764### Fixed
765
766* Fix invalid node generation in `RandomNodeProvider`
767* Avoid multiple unnecessary system calls by caching failed attempt to retrieve
768 system node
769
770
771## [3.4.1] - 2016-04-23
772
773### Fixed
774
775* Fix test that violated a PHP CodeSniffer rule, breaking the build
776
777
778## [3.4.0] - 2016-04-23
779
780### Added
781
782* Add `TimestampFirstCombCodec` and `TimestampLastCombCodec` codecs to provide
783 the ability to generate [COMB sequential UUIDs] with the timestamp encoded as
784 either the first 48 bits or the last 48 bits
785* Improve logic of `CombGenerator` for COMB sequential UUIDs
786
787
788## [3.3.0] - 2016-03-22
789
790### Security
791
792* Drop the use of OpenSSL as a fallback and use [paragonie/random_compat] to
793 support `RandomBytesGenerator` in versions of PHP earlier than 7.0;
794 this addresses and fixes the [collision issue]
795
796
797## [3.2.0] - 2016-02-17
798
799### Added
800
801* Add `SodiumRandomGenerator` to allow use of the [PECL libsodium extension] as
802 a random bytes generator when creating UUIDs
803
804
805## [3.1.0] - 2015-12-17
806
807### Added
808
809* Implement the PHP `Serializable` interface to provide the ability to
810 serialize/unserialize UUID objects
811
812
813## [3.0.1] - 2015-10-21
814
815### Added
816
817* Adopt the [Contributor Code of Conduct] for this project
818
819
820## [3.0.0] - 2015-09-28
821
822The 3.0.0 release represents a significant step for the ramsey/uuid library.
823While the simple and familiar API used in previous versions remains intact, this
824release provides greater flexibility to integrators, including the ability to
825inject your own number generators, UUID codecs, node and time providers, and
826more.
827
828*Please note: The changelog for 3.0.0 includes all notes from the alpha and beta
829versions leading up to this release.*
830
831### Added
832
833* Add a number of generators that may be used to override the library defaults
834 for generating random bytes (version 4) or time-based (version 1) UUIDs
835 * `CombGenerator` to allow generation of sequential UUIDs
836 * `OpenSslGenerator` to generate random bytes on systems where
837 `openssql_random_pseudo_bytes()` is present
838 * `MtRandGenerator` to provide a fallback in the event other random generators
839 are not present
840 * `RandomLibAdapter` to allow use of [ircmaxell/random-lib]
841 * `RandomBytesGenerator` for use with PHP 7; ramsey/uuid will default to use
842 this generator when running on PHP 7
843 * Refactor time-based (version 1) UUIDs into a `TimeGeneratorInterface` to
844 allow for other sources to generate version 1 UUIDs in this library
845 * `PeclUuidTimeGenerator` and `PeclUuidRandomGenerator` for creating version
846 1 or version 4 UUIDs using the pecl-uuid extension
847* Add a `setTimeGenerator` method on `UuidFactory` to override the default time
848 generator
849* Add option to enable `PeclUuidTimeGenerator` via `FeatureSet`
850* Support GUID generation by configuring a `FeatureSet` to use GUIDs
851* Allow UUIDs to be serialized as JSON through `JsonSerializable`
852
853### Changed
854
855* Change root namespace from "Rhumsaa" to "Ramsey;" in most cases, simply
856 making this change in your applications is the only upgrade path you will
857 need—everything else should work as expected
858* No longer consider `Uuid` class as `final`; everything is now based around
859 interfaces and factories, allowing you to use this package as a base to
860 implement other kinds of UUIDs with different dependencies
861* Return an object of type `DegradedUuid` on 32-bit systems to indicate that
862 certain features are not available
863* Default `RandomLibAdapter` to a medium-strength generator with
864 [ircmaxell/random-lib]; this is configurable, so other generator strengths may
865 be used
866
867### Removed
868
869* Remove `PeclUuidFactory` in favor of using pecl-uuid with generators
870* Remove `timeConverter` and `timeProvider` properties, setters, and getters in
871 both `FeatureSet` and `UuidFactory` as those are now exclusively used by the
872 default `TimeGenerator`
873* Move UUID [Doctrine field type] to [ramsey/uuid-doctrine]
874* Move `uuid` console application to [ramsey/uuid-console]
875* Remove `Uuid::VERSION` package version constant
876
877### Fixed
878
879* Improve GUID support to ensure that:
880 * On little endian (LE) architectures, the byte order of the first three
881 fields is LE
882 * On big endian (BE) architectures, it is the same as a GUID
883 * String representation is always the same
884* Fix exception message for `DegradedNumberConverter::fromHex()`
885
886
887## [3.0.0-beta1] - 2015-08-31
888
889### Fixed
890
891* Improve GUID support to ensure that:
892 * On little endian (LE) architectures, the byte order of the first three
893 fields is LE
894 * On big endian (BE) architectures, it is the same as a GUID
895 * String representation is always the same
896* Fix exception message for `DegradedNumberConverter::fromHex()`
897
898
899## [3.0.0-alpha3] - 2015-07-28
900
901### Added
902
903* Enable use of custom `TimeGenerator` implementations
904* Add a `setTimeGenerator` method on `UuidFactory` to override the default time
905 generator
906* Add option to enable `PeclUuidTimeGenerator` via `FeatureSet`
907
908### Removed
909
910* Remove `timeConverter` and `timeProvider` properties, setters, and getters in
911 both `FeatureSet` and `UuidFactory` as those are now exclusively used by the
912 default `TimeGenerator`
913
914
915## [3.0.0-alpha2] - 2015-07-28
916
917### Added
918
919* Refactor time-based (version 1) UUIDs into a `TimeGeneratorInterface` to allow
920 for other sources to generate version 1 UUIDs in this library
921* Add `PeclUuidTimeGenerator` and `PeclUuidRandomGenerator` for creating version
922 1 or version 4 UUIDs using the pecl-uuid extension
923* Add `RandomBytesGenerator` for use with PHP 7. ramsey/uuid will default to use
924 this generator when running on PHP 7
925
926### Changed
927
928* Default `RandomLibAdapter` to a medium-strength generator with
929 [ircmaxell/random-lib]; this is configurable, so other generator strengths may
930 be used
931
932### Removed
933
934* Remove `PeclUuidFactory` in favor of using pecl-uuid with generators
935
936
937## [3.0.0-alpha1] - 2015-07-16
938
939### Added
940
941* Allow dependency injection through `UuidFactory` and/or extending `FeatureSet`
942 to override any package defaults
943* Add a number of generators that may be used to override the library defaults:
944 * `CombGenerator` to allow generation of sequential UUIDs
945 * `OpenSslGenerator` to generate random bytes on systems where
946 `openssql_random_pseudo_bytes()` is present
947 * `MtRandGenerator` to provide a fallback in the event other random generators
948 are not present
949 * `RandomLibAdapter` to allow use of [ircmaxell/random-lib]
950* Support GUID generation by configuring a `FeatureSet` to use GUIDs
951* Allow UUIDs to be serialized as JSON through `JsonSerializable`
952
953### Changed
954
955* Change root namespace from "Rhumsaa" to "Ramsey;" in most cases, simply
956 making this change in your applications is the only upgrade path you will
957 need—everything else should work as expected
958* No longer consider `Uuid` class as `final`; everything is now based around
959 interfaces and factories, allowing you to use this package as a base to
960 implement other kinds of UUIDs with different dependencies
961* Return an object of type `DegradedUuid` on 32-bit systems to indicate that
962 certain features are not available
963
964### Removed
965
966* Move UUID [Doctrine field type] to [ramsey/uuid-doctrine]
967* Move `uuid` console application to [ramsey/uuid-console]
968* Remove `Uuid::VERSION` package version constant
969
970
971## [2.9.0] - 2016-03-22
972
973### Security
974
975* Drop the use of OpenSSL as a fallback and use [paragonie/random_compat] to
976 support `RandomBytesGenerator` in versions of PHP earlier than 7.0;
977 this addresses and fixes the [collision issue]
978
979
980## [2.8.4] - 2015-12-17
981
982### Added
983
984* Add support for symfony/console v3 in the `uuid` CLI application
985
986
987## [2.8.3] - 2015-08-31
988
989### Fixed
990
991* Fix exception message in `Uuid::calculateUuidTime()`
992
993
994## [2.8.2] - 2015-07-23
995
996### Fixed
997
998* Ensure the release tag makes it into the rhumsaa/uuid package
999
1000
1001## [2.8.1] - 2015-06-16
1002
1003### Fixed
1004
1005* Use `passthru()` and output buffering in `getIfconfig()`
1006* Cache the system node in a static variable so that we process it only once per
1007 runtime
1008
1009
1010## [2.8.0] - 2014-11-09
1011
1012### Added
1013
1014* Add static `fromInteger()` method to create UUIDs from string integer or
1015 `Moontoast\Math\BigNumber`
1016
1017### Fixed
1018
1019* Improve Doctrine conversion to Uuid or string for the ramsey/uuid [Doctrine field type]
1020
1021
1022## [2.7.4] - 2014-10-29
1023
1024### Fixed
1025
1026* Change loop in `generateBytes()` from `foreach` to `for`
1027
1028
1029## [2.7.3] - 2014-08-27
1030
1031### Fixed
1032
1033* Fix upper range for `mt_rand` used in version 4 UUIDs
1034
1035
1036## [2.7.2] - 2014-07-28
1037
1038### Changed
1039
1040* Upgrade to PSR-4 autoloading
1041
1042
1043## [2.7.1] - 2014-02-19
1044
1045### Fixed
1046
1047* Move moontoast/math and symfony/console to require-dev
1048* Support symfony/console 2.3 (LTS version)
1049
1050
1051## [2.7.0] - 2014-01-31
1052
1053### Added
1054
1055* Add `Uuid::VALID_PATTERN` constant containing a UUID validation regex pattern
1056
1057
1058## [2.6.1] - 2014-01-27
1059
1060### Fixed
1061
1062* Fix bug where `uuid` console application could not find the Composer
1063 autoloader when installed in another project
1064
1065
1066## [2.6.0] - 2014-01-17
1067
1068### Added
1069
1070* Introduce `uuid` console application for generating and decoding UUIDs from
1071 CLI (run `./bin/uuid` for details)
1072* Add `Uuid::getInteger()` to retrieve a `Moontoast\Math\BigNumber`
1073 representation of the 128-bit integer representing the UUID
1074* Add `Uuid::getHex()` to retrieve the hexadecimal representation of the UUID
1075* Use `netstat` on Linux to capture the node for a version 1 UUID
1076* Require moontoast/math as part of the regular package requirements
1077
1078
1079## [2.5.0] - 2013-10-30
1080
1081### Added
1082
1083* Use `openssl_random_pseudo_bytes()`, if available, to generate random bytes
1084
1085
1086## [2.4.0] - 2013-07-29
1087
1088### Added
1089
1090* Return `null` from `Uuid::getVersion()` if the UUID isn't an RFC 4122 variant
1091* Support string UUIDs without dashes passed to `Uuid::fromString()`
1092
1093
1094## [2.3.0] - 2013-07-16
1095
1096### Added
1097
1098* Support creation of UUIDs from bytes with `Uuid::fromBytes()`
1099
1100
1101## [2.2.0] - 2013-07-04
1102
1103### Added
1104
1105* Add `Doctrine\UuidType::requiresSQLCommentHint()` method
1106
1107
1108## [2.1.2] - 2013-07-03
1109
1110### Fixed
1111
1112* Fix cases where the system node was coming back with uppercase hexadecimal
1113 digits; this ensures that case in the node is converted to lowercase
1114
1115
1116## [2.1.1] - 2013-04-29
1117
1118### Fixed
1119
1120* Fix bug in `Uuid::isValid()` where the NIL UUID was not reported as valid
1121
1122
1123## [2.1.0] - 2013-04-15
1124
1125### Added
1126
1127* Allow checking the validity of a UUID through the `Uuid::isValid()` method
1128
1129
1130## [2.0.0] - 2013-02-11
1131
1132### Added
1133
1134* Support UUID generation on 32-bit platforms
1135
1136### Changed
1137
1138* Mark `Uuid` class `final`
1139* Require moontoast/math on 64-bit platforms for
1140 `Uuid::getLeastSignificantBits()` and `Uuid::getMostSignificantBits()`; the
1141 integers returned by these methods are *unsigned* 64-bit integers and
1142 unsupported even on 64-bit builds of PHP
1143* Move `UnsupportedOperationException` to the `Exception` subnamespace
1144
1145
1146## [1.1.2] - 2012-11-29
1147
1148### Fixed
1149
1150* Relax [Doctrine field type] conversion rules for UUIDs
1151
1152
1153## [1.1.1] - 2012-08-27
1154
1155### Fixed
1156
1157* Remove `final` keyword from `Uuid` class
1158
1159
1160## [1.1.0] - 2012-08-06
1161
1162### Added
1163
1164* Support ramsey/uuid UUIDs as a Doctrine Database Abstraction Layer (DBAL)
1165 field mapping type
1166
1167
1168## [1.0.0] - 2012-07-19
1169
1170### Added
1171
1172* Support generation of version 1, 3, 4, and 5 UUIDs
1173
1174
1175[comb sequential uuids]: http://www.informit.com/articles/article.aspx?p=25862&seqNum=7
1176[paragonie/random_compat]: https://github.com/paragonie/random_compat
1177[collision issue]: https://github.com/ramsey/uuid/issues/80
1178[contributor code of conduct]: https://github.com/ramsey/uuid/blob/master/.github/CODE_OF_CONDUCT.md
1179[pecl libsodium extension]: http://pecl.php.net/package/libsodium
1180[ircmaxell/random-lib]: https://github.com/ircmaxell/RandomLib
1181[doctrine field type]: http://doctrine-dbal.readthedocs.org/en/latest/reference/types.html
1182[ramsey/uuid-doctrine]: https://github.com/ramsey/uuid-doctrine
1183[ramsey/uuid-console]: https://github.com/ramsey/uuid-console
1184
1185[unreleased]: https://github.com/ramsey/uuid/compare/4.0.1...HEAD
1186[4.0.1]: https://github.com/ramsey/uuid/compare/4.0.0...4.0.1
1187[4.0.0]: https://github.com/ramsey/uuid/compare/4.0.0-beta2...4.0.0
1188[4.0.0-beta2]: https://github.com/ramsey/uuid/compare/4.0.0-beta1...4.0.0-beta2
1189[4.0.0-beta1]: https://github.com/ramsey/uuid/compare/4.0.0-alpha5...4.0.0-beta1
1190[4.0.0-alpha5]: https://github.com/ramsey/uuid/compare/4.0.0-alpha4...4.0.0-alpha5
1191[4.0.0-alpha4]: https://github.com/ramsey/uuid/compare/4.0.0-alpha3...4.0.0-alpha4
1192[4.0.0-alpha3]: https://github.com/ramsey/uuid/compare/4.0.0-alpha2...4.0.0-alpha3
1193[4.0.0-alpha2]: https://github.com/ramsey/uuid/compare/4.0.0-alpha1...4.0.0-alpha2
1194[4.0.0-alpha1]: https://github.com/ramsey/uuid/compare/3.9.3...4.0.0-alpha1
1195[3.9.3]: https://github.com/ramsey/uuid/compare/3.9.2...3.9.3
1196[3.9.2]: https://github.com/ramsey/uuid/compare/3.9.1...3.9.2
1197[3.9.1]: https://github.com/ramsey/uuid/compare/3.9.0...3.9.1
1198[3.9.0]: https://github.com/ramsey/uuid/compare/3.8.0...3.9.0
1199[3.8.0]: https://github.com/ramsey/uuid/compare/3.7.3...3.8.0
1200[3.7.3]: https://github.com/ramsey/uuid/compare/3.7.2...3.7.3
1201[3.7.2]: https://github.com/ramsey/uuid/compare/3.7.1...3.7.2
1202[3.7.1]: https://github.com/ramsey/uuid/compare/3.7.0...3.7.1
1203[3.7.0]: https://github.com/ramsey/uuid/compare/3.6.1...3.7.0
1204[3.6.1]: https://github.com/ramsey/uuid/compare/3.6.0...3.6.1
1205[3.6.0]: https://github.com/ramsey/uuid/compare/3.5.2...3.6.0
1206[3.5.2]: https://github.com/ramsey/uuid/compare/3.5.1...3.5.2
1207[3.5.1]: https://github.com/ramsey/uuid/compare/3.5.0...3.5.1
1208[3.5.0]: https://github.com/ramsey/uuid/compare/3.4.1...3.5.0
1209[3.4.1]: https://github.com/ramsey/uuid/compare/3.4.0...3.4.1
1210[3.4.0]: https://github.com/ramsey/uuid/compare/3.3.0...3.4.0
1211[3.3.0]: https://github.com/ramsey/uuid/compare/3.2.0...3.3.0
1212[3.2.0]: https://github.com/ramsey/uuid/compare/3.1.0...3.2.0
1213[3.1.0]: https://github.com/ramsey/uuid/compare/3.0.1...3.1.0
1214[3.0.1]: https://github.com/ramsey/uuid/compare/3.0.0...3.0.1
1215[3.0.0]: https://github.com/ramsey/uuid/compare/3.0.0-beta1...3.0.0
1216[3.0.0-beta1]: https://github.com/ramsey/uuid/compare/3.0.0-alpha3...3.0.0-beta1
1217[3.0.0-alpha3]: https://github.com/ramsey/uuid/compare/3.0.0-alpha2...3.0.0-alpha3
1218[3.0.0-alpha2]: https://github.com/ramsey/uuid/compare/3.0.0-alpha1...3.0.0-alpha2
1219[3.0.0-alpha1]: https://github.com/ramsey/uuid/compare/2.9.0...3.0.0-alpha1
1220[2.9.0]: https://github.com/ramsey/uuid/compare/2.8.4...2.9.0
1221[2.8.4]: https://github.com/ramsey/uuid/compare/2.8.3...2.8.4
1222[2.8.3]: https://github.com/ramsey/uuid/compare/2.8.2...2.8.3
1223[2.8.2]: https://github.com/ramsey/uuid/compare/2.8.1...2.8.2
1224[2.8.1]: https://github.com/ramsey/uuid/compare/2.8.0...2.8.1
1225[2.8.0]: https://github.com/ramsey/uuid/compare/2.7.4...2.8.0
1226[2.7.4]: https://github.com/ramsey/uuid/compare/2.7.3...2.7.4
1227[2.7.3]: https://github.com/ramsey/uuid/compare/2.7.2...2.7.3
1228[2.7.2]: https://github.com/ramsey/uuid/compare/2.7.1...2.7.2
1229[2.7.1]: https://github.com/ramsey/uuid/compare/2.7.0...2.7.1
1230[2.7.0]: https://github.com/ramsey/uuid/compare/2.6.1...2.7.0
1231[2.6.1]: https://github.com/ramsey/uuid/compare/2.6.0...2.6.1
1232[2.6.0]: https://github.com/ramsey/uuid/compare/2.5.0...2.6.0
1233[2.5.0]: https://github.com/ramsey/uuid/compare/2.4.0...2.5.0
1234[2.4.0]: https://github.com/ramsey/uuid/compare/2.3.0...2.4.0
1235[2.3.0]: https://github.com/ramsey/uuid/compare/2.2.0...2.3.0
1236[2.2.0]: https://github.com/ramsey/uuid/compare/2.1.2...2.2.0
1237[2.1.2]: https://github.com/ramsey/uuid/compare/2.1.1...2.1.2
1238[2.1.1]: https://github.com/ramsey/uuid/compare/2.1.0...2.1.1
1239[2.1.0]: https://github.com/ramsey/uuid/compare/2.0.0...2.1.0
1240[2.0.0]: https://github.com/ramsey/uuid/compare/1.1.2...2.0.0
1241[1.1.2]: https://github.com/ramsey/uuid/compare/1.1.1...1.1.2
1242[1.1.1]: https://github.com/ramsey/uuid/compare/1.1.0...1.1.1
1243[1.1.0]: https://github.com/ramsey/uuid/compare/1.0.0...1.1.0
1244[1.0.0]: https://github.com/ramsey/uuid/commits/1.0.0
1245