PluginProbe
WCPOS – Point of Sale (POS) plugin for WooCommerce / 1.10.20
WCPOS – Point of Sale (POS) plugin for WooCommerce v1.10.20
1.10.20 1.10.19 1.10.18 1.10.17 1.10.16 1.10.15 1.10.13 1.10.14 1.10.12 1.10.11 1.10.10 1.10.9 1.10.8 untagged-3d9b7ccddc54df87c672 1.10.7 1.10.6 1.10.5 1.10.3 1.10.4 1.10.2 1.10.1 1.10.0 1.9.17 1.9.15 1.9.16 All 164 releases
woocommerce-pos / vendor / ramsey / uuid / src / Provider / Node / RandomNodeProvider.php

RandomNodeProvider.php in WCPOS – Point of Sale (POS) plugin for WooCommerce 1.10.20, at vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php

70 lines 1.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 <[email protected]>
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