PHP生成唯一ID
前言
PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳。在高并发或者间隔时长极短(如循环代码)的情况下,会出现大量重复数据。即使使用了第二个参数,也会重复,最好的方案是结合 md5 函数来生成唯一 ID。
使用函数
string uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] )
获取一个带前缀、基于当前时间微秒数的唯一 ID。prefix 有用的参数。例如:如果在多台主机上可能在同一微秒生成唯一 ID。prefix 为空,则返回的字符串长度为 13。moreentropy 为 TRUE,则返回的字符串长度为 23。moreentropy 如果设置为 TRUE,uniqid() 会在返回的字符串结尾增加额外的煽(使用 combined linear congruential generator)。使得唯一 ID 更具唯一性。
PHP uniqid() 生成不重复唯一标识方法一
这种方法会产生大量的重复数据,运行如下 PHP 代码会数组索引是产生的唯一标识,对应的元素值是该唯一标识重复的次数。
<?php
$units = array();
for($i=0;$i<1000000;$i++){
$units[] = uniqid();
}
$values = array_count_values($units);
$duplicates = [];
foreach($values as $k=>$v){
if($v>1){
$duplicates[$k]=$v;
}
}
echo '<pre>';
print_r($duplicates);
echo '</pre>';
?>
PHP uniqid() 生成不重复唯一标识方法二
这种方法生成的唯一标识重复量明显减少。
<?php
$units = array();
for($i=0;$i<1000000;$i++){
$units[] = uniqid('',true);
}
$values = array_count_values($units);
$duplicates = [];
foreach($values as $k=>$v){
if($v>1){
$duplicates[$k]=$v;
}
}
echo '<pre>';
print_r($duplicates);
echo '</pre>';
?>
PHP uniqid() 生成不重复唯一标识方法三
这种方法生成的唯一标识中没有重复。
<?php
$units = array();
for($i=0;$i<1000000;$i++){
$units[]=md5(uniqid(md5(microtime(true)),true));
}
$values = array_count_values($units);
$duplicates = [];
foreach($values as $k=>$v){
if($v>1){
$duplicates[$k]=$v;
}
}
echo '<pre>';
print_r($duplicates);
echo '</pre>';
?>
PHP uniqid() 生成不重复唯一标识方法四
使用 sessioncreateid()函数生成唯一标识符,经过实际测试发现,即使循环调用 sessioncreateid()一亿次,都没有出现过重复。php sessioncreateid()是 php 7.1 新增的函数,用来生成 session id,低版本无法使用
PHP生成唯一ID的更多相关文章
- php 生成唯一id的几种解决方法
php 生成唯一id的几种解决方法 网上查了下,有很多的方法 1.md5(time() . mt_rand(1,1000000)); 这种方法有一定的概率会出现重复 2.php内置函数uniqid ...
- PHP使用SnowFlake算法生成唯一ID
前言:最近需要做一套CMS系统,由于功能比较单一,而且要求灵活,所以放弃了WP这样的成熟系统,自己做一套相对简单一点的.文章的详情页URL想要做成url伪静态的格式即xxx.html 其中xxx考虑过 ...
- php生成唯一id/唯一标识符/唯一订单号
/** * php 生成唯一id * https://blog.csdn.net/hzqghost/article/details/18914681 */ function guid($factor= ...
- 如何使用php生成唯一ID的4种方法
php生成唯一ID的应用场景非常普遍,如临时缓存文件名称,临时变量,临时安全码等,uniqid()函数基于以微秒计的当前时间,生成一个唯一的 ID.由于生成唯一ID与微秒时间关联,因此ID的唯一性非常 ...
- PHP获取时间戳和微秒数以及生成唯一ID
microtime函数 描述:返回当前Unix时间戳和微秒数 语法:mixed microtime( [ bool $get_as_float ] ) //直接输出 echo microtime(); ...
- 根据twitter的snowflake算法生成唯一ID
C#版本 /// <summary> /// 根据twitter的snowflake算法生成唯一ID /// snowflake算法 64 位 /// 0---0000000000 000 ...
- C# 根据twitter的snowflake算法生成唯一ID
C# 版算法: using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- php 生成唯一id的几种解决方法(实例)
php 生成唯一id,网上查了下,有很多的方法 1.md5(time() . mt_rand(1,1000000)); 这种方法有一定的概率会出现重复 2.php内置函数uniqid() uniqid ...
- python学习之-- 生成唯一ID
以下以2种方法生成唯一ID def uuid_method(): """第一种方法""" import uuid return str(uu ...
- PHP生成唯一ID的方法
PHP自带生成唯一id的函数:uniqid() 它是基于当前时间微秒数的 用法如下: echo uniqid(); //13位的字符串 echo uniqid("php_"); / ...
随机推荐
- 参加杭州 2019 AI Bootcamp有感与总结(2)
接上篇 参加杭州 2019 AI Bootcamp有感与总结(1) - repeatedly - 博客园 午餐畅谈的收获 先感谢主办方提供的午餐,中午午休的时候,大家聊了很多,或者说主要是听大佬谈.聊 ...
- ReactNative: 使用对话框组件AlertIOS组件
一.简介 在使用一款App的时候,经常会用到对话框进行信息的友好提示,一般简单要求性不高的时候我们可以使用web提供的alert实现即可.但是,对于需要交互性和美观性的对话框,alert就明显无法满足 ...
- Open Redirect 开放重定向
- 利用Fiddler对Jmeter的请求进行抓包
前言 有时候,为了得到更详细的请求结果,我们可能需要使用Fiddler结合Jmeter来抓包分析,从而更好的辅助测试. 遇到的问题 这里以一个获取学生信息的接口为例进行说明. 当我在Jmeter里按接 ...
- Additional information: The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding elemen
wcf service: <system.serviceModel> <bindings> <basicHttpBinding> <binding name= ...
- Flask 模板语言,装饰器
Jinja2模板语言 # -*- coding: utf-8 -*- from flask import Flask, render_template, request, redirect, ...
- C lang:Protect array data——Const
Xx_Introduction Use pointer translate parameter array original data will change data,and use const p ...
- QT--图灵机器人
QT--图灵机器人 1.登陆图灵机器人官网注册一个图灵机器人 2.获取apikey 3.pro文件添加 QT += core gui network 4.头文件 #include < ...
- docker容器的基本使用
### Docker中镜像的基本使用以及Docker的基本使用 #### 1.Docker的安装 ```先进入终端,然后使用以下命令:sudo apt-get updatesudo apt-get i ...
- 【bzoj5339】[TJOI2018]教科书般的亵渎(拉格朗日插值/第二类斯特林数)
传送门 题意: 一开始有很多怪兽,每个怪兽的血量在\(1\)到\(n\)之间且各不相同,\(n\leq 10^{13}\). 然后有\(m\)种没有出现的血量,\(m\leq 50\). 现在有个人可 ...