SORU
11 Ocak 2010, PAZARTESİ


PHP v4 UUID oluşturmak için işlev

Etrafta biraz araştırma yaptım ve birlikte PHP içinde geçerli v4 UUID üreten bir işlev parça için çalışıyorum. Bu gelmek mümkün oldum en yakın yer. Hex, ondalık, ikili, PHP bit operatörleri ve bilgimi neredeyse mevcut olmayan. Bu işlev, bir tane alana kadar geçerli v4 UUID üretir. V4 UUID şeklinde olmalıdır:

Üsküdar-xxxx-4xxx-yxxx-bitirdiler

neredey8, 9, A, B, ya da Bu işlevler için uygun değil gibi başarısız.

Bu alanda bana yardım et ve beni bu kurala uymak yok yani bu fonksiyonu düzeltmek yardımcı olabilir daha iyi bilen birini umuyordum.

İşlevi aşağıdaki gibidir:

<?php

function 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('x-x-x-xx-xxxxxx',
  $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;
}

?>

Bana yardımcı olabilecek herkese teşekkürler.

CEVAP
11 Ocak 2010, PAZARTESİ


PHP manuel this yorum almış, bu kullanabilirsiniz:

function gen_uuid() {
    return sprintf( 'xx-x-x-x-xxx',
        // 32 bits for "time_low"
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),

        // 16 bits for "time_mid"
        mt_rand( 0, 0xffff ),

        // 16 bits for "time_hi_and_version",
        // four most significant bits holds version number 4
        mt_rand( 0, 0x0fff ) | 0x4000,

        // 16 bits, 8 bits for "clk_seq_hi_res",
        // 8 bits for "clk_seq_low",
        // two most significant bits holds zero and one for variant DCE1.1
        mt_rand( 0, 0x3fff ) | 0x8000,

        // 48 bits for "node"
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
    );
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Doug Bernards

    Doug Bernard

    7 Kasım 2007
  • Qmusic Romania

    Qmusic Roman

    8 Temmuz 2011
  • The Platform

    The Platform

    14 HAZİRAN 2006