note 112179 added to function.uniqid
| From: | zlei1989 at live dot cn | Date: | Tue, 14 May 2013 09:55:19 +0000 |
| Subject: | note 112179 added to function.uniqid | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-194801@lists.php.net to get a copy of this message | ||
è¿ä¸ªå½æ°æ¯ç¨æ¥çæä¸ä¸ªåºäºæ¶é´çå
¨å±å¯ä¸æ è¯ï¼macå°å使ç¨ipå°å代æ¿ã
ä½ ä¹å¯ä»¥æç©ºé²ç两个åè设置æé¡¹ç®ä»£å·ï¼æè
è®°å½ç±»åä¹ç±»çã
è¿æ ·éè¿æ è¯ï¼å°±å¯ä»¥ç¥éè¿æ¯ä»ä¹ç±»åçæ°æ®ï¼ä»ä¹æ¶é´å建ï¼åªå°ä¸»æºçæã
<?php
/**
* å建ä¸ä¸ªåºäºæ¶é´çå
¨å±å¯ä¸æ è¯ UUID
v1
* http://www.ietf.org/rfc/rfc4122.txt
*
* @param number $prefix
* åå¼èå´æ¯ 0~65535 ä¹é´ã
* å¯ä»¥ç¨ä½æ è¯è®°å½ç±»åï¼æè
项ç®ä»£å·ã
* @return string
*/
function newID ( $prefix = 0 )
{
// éæåéç¨äºè®¡æ°
static $ticks = 0;
static $clock = null;
// åå§éæºç§å
is_null( $clock ) && $clock = rand( 0, 0x3FFF );
// ç¡®ä¿0.0000001ç§å
å建16383个æ è¯ä¸ä¼éå¤
$ticks++;
// è¿è¡æ¶é´è½¬æ¢ UUID 使ç¨çæ¯ 1582-10-15 00:00:00.00
$microtime = microtime();
$timestamp = subStr( $microtime, -10 ) . subStr( $microtime, 2, 7 );
$uuidTime = bcadd( $timestamp, '122192928000000000' );
$sequence = $clock ^ $ticks | 0x8000;
// subStr
为äºé²æ¢è¥å¹²å¹´åå é¿åº¦åå导è´é误
$t1_t2_t3 = subStr( str_pad(
base_convert( $uuidTime, 10, 16 )
, 15, '0', STR_PAD_LEFT ), -15 );
$t1 = substr( $t1_t2_t3, 7, 8 );
$t2 = substr( $t1_t2_t3, 3, 4 );
$t3 = substr( $t1_t2_t3, 0, 3 );
// IIS7 å¹³å°ä¸æ²¡æ $_SERVER['SERVER_ADDR']
$serverAdr = isset( $_SERVER['SERVER_ADDR'] )
? $_SERVER['SERVER_ADDR']
: $_SERVER['LOCAL_ADDR'];
list( $i1, $i2, $i3, $i4 ) = explode( '.', $serverAdr );
// è¿åç»æ
return sPrintF( "%s-%s-1%s-%04x-%04x%02x%02x%02x%02x",
$t1, $t2, $t3,
$sequence, $prefix,
$i1, $i2, $i3, $i4 );
}
// æµè¯ä»£ç
for( $i=0; $i<999; $i++ ) {
echo newID( 0xD100 );
echo "<br />";
}
?>
----
Server IP: 69.147.83.199
Probable Submitter: 123.122.16.77
----
Manual Page -- http://php.net/manual/en/function.uniqid.php
Edit -- https://master.php.net/note/edit/112179
Del: integrated -- https://master.php.net/note/delete/112179/integrated
Del: useless -- https://master.php.net/note/delete/112179/useless
Del: bad code -- https://master.php.net/note/delete/112179/bad+code
Del: spam -- https://master.php.net/note/delete/112179/spam
Del: non-english -- https://master.php.net/note/delete/112179/non-english
Del: in docs -- https://master.php.net/note/delete/112179/in+docs
Del: other reasons-- https://master.php.net/note/delete/112179
Reject -- https://master.php.net/note/reject/112179
Search -- https://master.php.net/manage/user-notes.php