当前位置: 首页 > 编程笔记 >

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

司马昕
2023-03-14
本文向大家介绍PHP生成不重复标识符的方法,包括了PHP生成不重复标识符的方法的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了PHP生成不重复标识符的方法。分享给大家供大家参考。具体实现方法如下:

生成唯一不重复的标识我们主要是根据当前的一个时间time然后再转换在md5值,这样几乎是可以保证标签的唯一性,下面整理了一些关于PHP生成不重复标识符程序代码,感兴趣的朋友可以来看一下

PHP倒是自带了生成唯一id的函数:uniqid() ,它是基于当前时间微秒数的,用法如下:

echo uniqid(); //13位的字符串

echo uniqid("php_"); //当然你可以加上前缀

echo uniqid("php_", TRUE); //如果第二个参数more_entropy为true则生成23位字符串

但是它生成的标识有可能不是唯一的,所以很多人会:
<?php

    //这是第一种简单的方法,当然用sha1()函数也可以。

    echo md5(uniqid());

    //第二种,利用时间戳的方法

    echo md5(time() . mt_rand(1,1000000));

?>

例子:
<?

//生成唯一标识符

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

function create_unique() {

    $data = $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']

     .time() . rand();

    return sha1($data);

    //return md5(time().$data);

    //return $data;

}

?>

例子如下:
<?php

$newhash = create_unique();

echo $newhash; 

?>

我看到很多人使用 md5() 函数,即使它并不完全意味着这个目的:
// 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

*/

你可能会注意到,尽管字符串是唯一的,前几个字符却是类似的,这是因为生成的字符串与服务器时间相关。

但实际上也存在友好的一方面,由于每个新生成的 ID 会按字母顺序排列,这样排序就变得很简单。

为了减少重复的概率,你可以传递一个前缀,或第二个参数来增加:

// with prefix

echo uniqid('foo_');

/* prints

foo_4bd67d6cd8b8f

*/

// with more entropy

echo uniqid('',true);

/* prints

4bd67d6cd8b926.12135106

*/

// both

echo uniqid('bar_',true);

/* prints

bar_4bd67da367b650.43684647

*/

这个函数将产生比 md5() 更短的字符串,节省一些空间。

php生成全球唯一标识符(GUID)的方法

GUID在空间上和时间上具有唯一性,保证同一时间不同地方产生的数字不同。
世界上的任何两台计算机都不会生成重复的 GUID 值。
需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理。
GUID的长度固定,并且相对而言较短小,非常适合于排序、标识和存储。

<?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; 

}

?>

希望本文所述对大家的php程序设计有所帮助。

 类似资料:
  • When considering portability between databases, another important decision is selecting the identifier generation stratagy you want to use. Originally Hibernate provided the native generator for this

  • 本文向大家介绍PHP生成不重复随机数的方法汇总,包括了PHP生成不重复随机数的方法汇总的使用技巧和注意事项,需要的朋友参考一下 无论是Web应用,还是WAP或者移动应用,随机数都有其用武之地。在最近接触的几个小项目中,我也经常需要和随机数或者随机数组打交道,所以,对于PHP如何产生不重复随机数常用的几种方法小结一下。 方法一: 方法二: 方法三: 上述可以在1-20间随机产生5个不重复的值 方法四

  • 当我尝试运行“ php artisan key:generate ” 时,我在提示中收到以下错误错误屏幕截图实际上我正在不同的笔记本电脑上运行一个 laravel 项目。我在生成密钥时遇到此问题。我该如何解决?

  • 我使用Angular/Universal-Starter作为起动器,它使用Typescript2和WebPack2。 我添加了包和。在添加这些包和相关类型之后: 它在终端中给出了以下错误: 我的tsconfig.json文件: 我如何解决这个错误?谢谢

  • 我有一个实体,除了主键之外,还应该为它生成一个额外的唯一标识符: 属性值通过调用 并添加前缀字符串,从 postgres 序列值派生而来。当我执行大容量插入时,我必须求助于在我的JPA存储库中为实体定义的自定义查询,该查询一次检索多个序列值,但我想使此过程自动进行。 我尝试实现< code>IdentifierGenerator接口,但我能实现的最好结果是为每个插入的新实体执行一个< code>S

  • 问题内容: 阅读MDN生成器的文档后,我想到了一个简单的实验: 在设置了标志的node.js v0.11.9上运行它会产生以下错误: 我也尝试使用and 关键字代替,但是没有成功。 我不明白到底是什么,但是如果我在循环中使用它,我会得到: 如果我用输出替换for中的收益,则和。我究竟做错了什么? 编辑 这是一个简约的生成器,显示node.js知道如何处理生成器: 输出: 解决方案(感谢@Andre