生成v4 UUID的PHP函数

生成v4 UUID的PHP函数

因此,我已经做了一些调查,我一直试图拼凑一个函数,以生成一个有效的v4UUID在PHP。这是我能来的最近的一次。我在十六进制、十进制、二进制、PHP的位运算符等方面的知识几乎是不存在的。此函数生成一个有效的v4UUID,直到一个区域。V4 UUID应以下形式出现:

xxxxxxx-xxxx-4XXX-yxxx-xxxxxxxxxx

哪里y是8,9,A或B。这是函数失败的地方,因为它不遵守它。

我希望在这方面比我有更多知识的人能帮我忙,帮我解决这个问题,这样它就能遵守这个规则。

职能如下:

<?phpfunction gen_uuid() {
 $uuid = array(
  'time_low'  => 0,
  'time_mid'  => 0,
  'time_hi'  => 0,
  'clock_seq_hi' => 0,
  'clock_seq_low' => 0,
  'node'   => array()
 );

 $uuid['time_low'] = mt_rand(0, 0xffff) + (mt_rand(0, 0xffff) << 16);
 $uuid['time_mid'] = mt_rand(0, 0xffff);
 $uuid['time_hi'] = (4 << 12) | (mt_rand(0, 0x1000));
 $uuid['clock_seq_hi'] = (1 << 7) | (mt_rand(0, 128));
 $uuid['clock_seq_low'] = mt_rand(0, 255);

 for ($i = 0; $i < 6; $i++) {
  $uuid['node'][$i] = mt_rand(0, 255);
 }

 $uuid = sprintf('%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x',
  $uuid['time_low'],
  $uuid['time_mid'],
  $uuid['time_hi'],
  $uuid['clock_seq_hi'],
  $uuid['clock_seq_low'],
  $uuid['node'][0],
  $uuid['node'][1],
  $uuid['node'][2],
  $uuid['node'][3],
  $uuid['node'][4],
  $uuid['node'][5]
 );

 return $uuid;}?>

感谢任何能帮我的人。


慕田峪4524236
浏览 1245回答 3
3回答

BIG阳

摘自这,这个对于PHP手册的注释,您可以使用以下内容:function&nbsp;gen_uuid()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sprintf(&nbsp;'%04x%04x-%04x-%04x-%04x-%04x%04x%04x', &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;32&nbsp;bits&nbsp;for&nbsp;"time_low" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mt_rand(&nbsp;0,&nbsp;0xffff&nbsp;),&nbsp;mt_rand(&nbsp;0,&nbsp;0xffff&nbsp;), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;16&nbsp;bits&nbsp;for&nbsp;"time_mid" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mt_rand(&nbsp;0,&nbsp;0xffff&nbsp;), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;16&nbsp;bits&nbsp;for&nbsp;"time_hi_and_version", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;four&nbsp;most&nbsp;significant&nbsp;bits&nbsp;holds&nbsp;version&nbsp;number&nbsp;4 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mt_rand(&nbsp;0,&nbsp;0x0fff&nbsp;)&nbsp;|&nbsp;0x4000, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;16&nbsp;bits,&nbsp;8&nbsp;bits&nbsp;for&nbsp;"clk_seq_hi_res", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;8&nbsp;bits&nbsp;for&nbsp;"clk_seq_low", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;two&nbsp;most&nbsp;significant&nbsp;bits&nbsp;holds&nbsp;zero&nbsp;and&nbsp;one&nbsp;for&nbsp;variant&nbsp;DCE1.1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mt_rand(&nbsp;0,&nbsp;0x3fff&nbsp;)&nbsp;|&nbsp;0x8000, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;48&nbsp;bits&nbsp;for&nbsp;"node" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mt_rand(&nbsp;0,&nbsp;0xffff&nbsp;),&nbsp;mt_rand(&nbsp;0,&nbsp;0xffff&nbsp;),&nbsp;mt_rand(&nbsp;0,&nbsp;0xffff&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;);}
打开App,查看更多内容
随时随地看视频慕课网APP