PluginProbe ʕ •ᴥ•ʔ
ShareThis Dashboard for Google Analytics / trunk
ShareThis Dashboard for Google Analytics vtrunk
3.3.2 trunk 1.0.7 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.1 2.1.2 2.1.3 2.1.4 2.1.5 2.2.5 2.3.5 2.3.6 2.3.7 2.3.8 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 3.0.0 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.3.0 3.3.1
googleanalytics / lib / analytics-admin / vendor / ramsey / uuid / src / Provider / Node / RandomNodeProvider.php
googleanalytics / lib / analytics-admin / vendor / ramsey / uuid / src / Provider / Node Last commit date
FallbackNodeProvider.php 3 years ago NodeProviderCollection.php 3 years ago RandomNodeProvider.php 3 years ago StaticNodeProvider.php 3 years ago SystemNodeProvider.php 3 years ago
RandomNodeProvider.php
70 lines
1 <?php
2
3 /**
4 * This file is part of the ramsey/uuid library
5 *
6 * For the full copyright and license information, please view the LICENSE
7 * file that was distributed with this source code.
8 *
9 * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
10 * @license http://opensource.org/licenses/MIT MIT
11 */
12
13 declare(strict_types=1);
14
15 namespace Ramsey\Uuid\Provider\Node;
16
17 use Ramsey\Uuid\Exception\RandomSourceException;
18 use Ramsey\Uuid\Provider\NodeProviderInterface;
19 use Ramsey\Uuid\Type\Hexadecimal;
20 use Throwable;
21
22 use function bin2hex;
23 use function dechex;
24 use function hex2bin;
25 use function hexdec;
26 use function str_pad;
27 use function substr;
28
29 use const STR_PAD_LEFT;
30
31 /**
32 * RandomNodeProvider generates a random node ID
33 *
34 * @link http://tools.ietf.org/html/rfc4122#section-4.5 RFC 4122, § 4.5: Node IDs that Do Not Identify the Host
35 */
36 class RandomNodeProvider implements NodeProviderInterface
37 {
38 public function getNode(): Hexadecimal
39 {
40 try {
41 $nodeBytes = random_bytes(6);
42 } catch (Throwable $exception) {
43 throw new RandomSourceException(
44 $exception->getMessage(),
45 (int) $exception->getCode(),
46 $exception
47 );
48 }
49
50 // Split the node bytes for math on 32-bit systems.
51 $nodeMsb = substr($nodeBytes, 0, 3);
52 $nodeLsb = substr($nodeBytes, 3);
53
54 // Set the multicast bit; see RFC 4122, section 4.5.
55 $nodeMsb = hex2bin(
56 str_pad(
57 dechex(hexdec(bin2hex($nodeMsb)) | 0x010000),
58 6,
59 '0',
60 STR_PAD_LEFT
61 )
62 );
63
64 // Recombine the node bytes.
65 $node = $nodeMsb . $nodeLsb;
66
67 return new Hexadecimal(str_pad(bin2hex($node), 12, '0', STR_PAD_LEFT));
68 }
69 }
70