奥门巴黎人手机网址【app】

PHP生成不重复标志符的方法

2019-08-10 14:37·巴黎人开户

正文实例汇报了PHP生成不重复标志符的诀要。共享给我们供我们参照他事他说加以考察。具体贯彻情势如下:

// with prefix
echo uniqid('foo_');
/* prints
foo_4bd67d6cd8b8f
*/

三、GUID生成类 PHP获得GUID类:guid_class.php

function  s42dec($sixty_four) { 
    $base_map = array ( '0' => 0,    '1' => 1,    '2' => 2,    '3' => 3,    '4' => 4,    '5' => 5,    '6' => 6,    '7' => 7,    '8' => 8,    '9' => 9,    '_' => 10,    '$' => 11,    'a' => 12,    'b' => 13,    'c' => 14,    'd' => 15,    'e' => 16,    'f' => 17,    'g' => 18,    'h' => 19,    'i' => 20,    'j' => 21,    'k' => 22,    'l' => 23,    'm' => 24,    'n' => 25,    'o' => 26,    'p' => 27,    'q' => 28,    'r' => 29,    's' => 30,    't' => 31,    'u' => 32,    'v' => 33,    'w' => 34,    'x' => 35,    'y' => 36,    'z' => 37,    'A' => 38,    'B' => 39,    'C' => 40,    'D' => 41,    'E' => 42,    'F' => 43,    'G' => 44,    'H' => 45,    'I' => 46,    'J' => 47,    'K' => 48,    'L' => 49,    'M' => 50,    'N' => 51,    'O' => 52,    'P' => 53,    'Q' => 54,    'R' => 55,    'S' => 56,    'T' => 57,    'U' => 58,    'V' => 59,    'W' => 60,    'X' => 61,    'Y' => 62,    'Z' => 63,  ); 
    $result = 0; 
    $len = strlen($sixty_four); 

本条函数将发出比 md5() 更加短的字符串,节省一些空中。

function create_unique() {
    $data = $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']
     .time() . rand();
    return sha1($data);
    //return md5(time().$data);

复制代码 代码如下:

可取:大概不会再一次;
劣势:对于给上传的图形重命名,依然过长了。
用法:

唯独它生成的标记有异常的大希望不是独一的,所以重重人会:

例子。

你也许感兴趣的稿子:

  • php 依照自增id创设独一编号类
  • php Infiniti级分类 获取顶尖分类ID
  • php获取Tmall分类id示例
  • php生成随机数的三种方法
  • php使用array_rand()函数从数组中任意选择三个或七个成分
  • PHP生成不重复随机数的措施汇总
  • PHP n个不重复的妄动数生成代码
  • PHP完结的生成独一RequestID类完整示例

复制代码 代码如下:

盼望本文所述对大家的php程序设计具备帮忙。

// with more entropy
echo uniqid('',true);
/* prints
4bd67d6cd8b926.12135106
*/

require_once("guid.class.php");   
$Guid = new Guid();   
print $Guid->toString();

    /**
     * 将64进制的数字字符串转为10进制的数字字符串
     * @param $m string 64进制的数字字符串
     * @param $len integer 再次来到字符串长度,借使长度缺乏用0填充,0为不填充
     * @return string
     * @author 野马
     */
    function hex64to10($m, $len = 0) {
        $m = (string)$m;
        $hex2 = '';
        $Code = KeyCode;
        for($i = 0, $l = strlen($Code); $i < $l; $i++) {
            $KeyCode[] = $Code[$i];
        }
        $KeyCode = array_flip($KeyCode);

复制代码 代码如下:

<?php
    //那是第一种轻巧的不二秘技,当然用sha1()函数也能够。
    echo md5(uniqid());
    //第二种,利用时间戳的点子
    echo md5(time() . mt_rand(1,1000000));
?>

<?php   
class System   
{   
    function currentTimeMillis()   
    {   
        list($usec, $sec) = explode(" ",microtime());   
        return $sec.substr($usec, 2, 3);   
    }   
}   
class NetAddress   
{   
    var $Name = 'localhost';   
    var $IP = '127.0.0.1';   
    function getLocalHost() // static   
    {   
        $address = new NetAddress();   
        $address->Name = $_ENV["COMPUTERNAME"];   
        $address->IP = $_SERVER["SERVER_ADDR"];   
        return $address;   
    }   
    function toString()   
    {   
        return strtolower($this->Name.'/'.$this->IP);   
    }   
}   
class Random   
{   
    function nextLong()   
    {   
        $tmp = rand(0,1)?'-':'';   
        return $tmp.rand(1000, 9999).rand(1000, 9999).rand(1000, 9999).rand(100, 999).rand(100, 999);   
    }   
}   
// 三段   
// 一段是飞秒 一段是地点 一段是随机数   
class Guid   
{   
    var $valueBeforeMD5;   
    var $valueAfterMD5;   
    function Guid()   
    {   
        $this->getGuid();   
    }   
    //   
    function getGuid()   
    {   
        $address = NetAddress::getLocalHost();   
        $this->valueBeforeMD5 = $address->toString().':'.System::currentTimeMillis().':'.Random::nextLong();   
        $this->valueAfterMD5 = md5($this->valueBeforeMD5);   
    }   
    function newGuid()   
    {   
        $Guid = new Guid();   
        return $Guid;   
    }   
    function toString()   
    {   
        $raw = strtoupper($this->valueAfterMD5);   
        return substr($raw,0,8).'-'.substr($raw,8,4).'-'.substr($raw,12,4).'-'.substr($raw,16,4).'-'.substr($raw,20);   
    }   
}

复制代码 代码如下:

<?php
$newhash = create_unique();
echo $newhash;
?>

 代码如下

复制代码 代码如下:

二,常规方案:

<?php
//php生成GUID
function getGuid() {
 $charid = strtoupper(md5(uniqid(mt_rand(), true)));
 
 $hyphen = chr(45);// "-"
 $uuid = substr($charid, 0, 8).$hyphen
 .substr($charid, 8, 4).$hyphen
 .substr($charid,12, 4).$hyphen
 .substr($charid,16, 4).$hyphen
 .substr($charid,20,12);
 return $uuid;
}
?>

    //return $data;

GUID类使用办法:

string(13) "51734aa562254" string(14) "a51734aa562257"

复制代码 代码如下:

//sha1()函数, "安全散列算法(SHA1)"

复制代码 代码如下:

const KeyCode = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$';

事举个例子下:

 代码如下

一、GUID简介
GUID: 即Globally Unique Identifier(举世独一标志符) 也称作 UUID(Universally Unique IDentifier) 。 GUID是三个经过一定算法发生的二进制长度为1贰17位的数字标记符,用于提醒产品的唯一性。GUID 重要用于在具有三个节点、多台Computer的互连网或系统中,分配必须有所唯一性的标志符。
在 Windows 平台上,GUID 遍布应用于微软的成品中,用于标记如如注册表项、类及接口标识、数据库、系统目录等对象。
GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,在那之中每种 x 是 0-9 或 a-f 范围内的一个三10位十六进制数。举个例子:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为使得的 GUID 值。
二、GUID的优点
1.GUID在半空上和时间上存有独一性,保障相同的时间不一致地点时有产生的数字差别。
2.世界上的别样两台Computer都不会扭转重复的 GUID 值。
3.要求GUID的时候,能够完全由算法自动生成,没有须要二个权威机构来治本。
4.GUID的长短固定,並且相对来讲异常的短小,特别适合于排序、标记和积存。
三、GUID生成函数

六,总结 正文涉及了上传图片重命名能够能动用的二种艺术,在那之中关键点是行使10进制转换为64进制来拓展字符串的缩减。
例如,使用fast_uuid生成的20人数字,转变为64进制只有7位字符;
实际使用,能够遵照自家状态灵活利用,希望对大家持有扶助。

复制代码 代码如下:

php生成全球独一标志符(GUID)的方法

function create_guid() {
    $charid = strtoupper(md5(uniqid(mt_rand(), true)));
    $hyphen = chr(45);// "-"
    $uuid = chr(123)// "{"
    .substr($charid, 0, 8).$hyphen
    .substr($charid, 8, 4).$hyphen
    .substr($charid,12, 4).$hyphen
    .substr($charid,16, 4).$hyphen
    .substr($charid,20,12)
    .chr(125);// "}"
    return $uuid;
}

<?php
/*
*组合time()函数使用,以一九六七年到方今时间的秒数作为种子数。
*/
$str=time();
echo md5($str);
?>

但实际也设有自身的一派,由于各样新变化的 ID 会按字母顺序排列,那样排序就变得很简单。

}
?>

1,guid:32 字符十六进制数。
格式:GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,当中各个 x 是 0-9 或 a-f 范围内的二个三10位十六进制数。举个例子:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为使得的 GUID 值。

您恐怕会小心到,尽管字符串是独一的,前多少个字符却是类似的,这是因为变化的字符串与服务器时间相关。

There is actually a PHP function named uniqid() that is meant to be used for this.

1,fast_uuid:返回17位数字。
有一点像uniqid()的不完全定制版,这么些函数里面出现的“种子数初步时间”概念很有启发性。
time()和uniqid()中暗许用到的日子都以从一九七〇年开班测度的,长度有十人(1366512439),选取“种子数伊始时间”能够裁减这么些数值,因为大家实际上要求的,仅仅是二个能够自动增长的数值就能够。
开局时间自定义今后,除了压缩长度,仍是可以够够起到混淆的功效。

浮动独一不重复的标记大家珍视是听大人说当下的一个时光time然后再转移在md5值,那样大约是能够确认保证标签的独一性,上边整理了一部分关于PHP生成不重复标记符程序代码,感兴趣的爱侣能够来看一下

 代码如下

2,MD5:
与guid 同样会输出32 字符十六进制数,分裂是guid是随机发生的,md5必要依照输入的数量变动。
例子,

echo uniqid(); //15个人的字符串
echo uniqid("php_"); //当然你能够拉长前缀
echo uniqid("php_", TRUE); //假使第三个参数more_entropy为true则生成二十二位字符串

 echo uniqid(); //14个人的字符串
 echo uniqid("php_"); //当然你能够增加前缀
    echo uniqid("php_", TRUE); //如若第四个参数more_entropy为true则生成23位

29832412631099013

自己见到许多少人使用 md5() 函数,纵然它并不完全意味着这一个目标:

<?
$newhash = create_unique();
echo $newhash;
?>

 $time1 = microtime(true);
 for($i = 0; $i < 10000; ++$i) {
     $str = dec2s4(idate("U")+$i);
    $strarr[] = "{$i}->$str\r\n<br>";
}
$time2 = microtime(true);
echo "\r\n<br />运行10000次用时(秒):" . ($time2 - $time1 - $time3);

// generate unique string
echo md5(time() . mt_rand(1,1000000));
There is actually a PHP function named uniqid() that is meant to be used for this.
// generate unique string
echo uniqid();
/* prints
4bd67c947233e
*/
// generate another unique string
echo uniqid();
/* prints
4bd67c9472340
*/

// both
echo uniqid('bar_',true);
/* prints
bar_4bd67da367b650.43684647
*/

复制代码 代码如下:

例子:

// generate unique string
echo uniqid();
/* prints
4bd67c947233e
*/

复制代码 代码如下:

复制代码 代码如下:

你大概会小心到,即使字符串是有一无二的,前多少个字符却是类似的,那是因为变化的字符串与服务器时间相关。

3,uniqid():再次回到13或二十二人字符串。
对此大家目标来讲,uniqid()疑似md5()的革新版,特别是我们得以行使差距性标记作为字符串前缀,能够下落再度命名出现的可能率。
对此非高并发等极端情状,推荐使用此函数,已经足以知足平时要求。
详尽表达,
概念:uniqid() 函数基于以微秒计的此时此刻岁月,生成多少个独一的 ID。
用法:uniqid(prefix,more_entropy)
表达:prefix可感到出口的字符串加多前缀,示举例下,more_entropy参数为true时,将出口贰十二位字符串。