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

  • Abe Olandres

    Abe Olandres

    16 EYLÜL 2006
  • brokenbellsVEVO

    brokenbellsV

    11 EYLÜL 2009
  • Kim Barbin

    Kim Barbin

    3 Mayıs 2012