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

  • kourtneyannmakeup

    kourtneyannm

    19 ŞUBAT 2012
  • MovieZoneET

    MovieZoneET

    22 Aralık 2009
  • Vsauce

    Vsauce

    30 Temmuz 2007