为数据库生成随机 ID

汤姆·沃恩

我对一个项目有需求

  • 我需要生成唯一的 ID。
  • ID 必须大写。
  • 我无法检查数据库以查看以前是否使用过 ID。

我们预计每月有数百万条记录添加到数据库中。

我在这里尝试过解决方案:PHP: How to generate a random, unique, alphanumeric string? 虽然它们一开始似乎有效,但我的测试表明随着时间的推移会有重复。

现在我正在考虑使用带有前缀的 uniqid。我发现使用没有前缀的 uniqid 的问题是,当同时请求同时进入服务器时,将生成重复项。我希望使用前缀可以解决这个问题。
我正在考虑使用这个功能:

private function generate_id()
{
    $alpha_numeric = 'ABCDEFGHIJKLMNPQRSTUVWXYZ0123456789';
    $max = strlen($alpha_numeric);
    $prefix = '';

    for ($i = 0; $i < 5; $i++)
    {
        $prefix .= $alpha_numeric[random_int(0, $max - 1)];
    }
    return strtoupper(uniqid($prefix));
}

前缀将是一个 5 个字符的字母数字字符串。这是否足以满足我的要求?

*****编辑*****

按照建议使用 UUID 将是限制碰撞机会的最佳方法,但已决定采用上述方法,但将前缀增加到 7 个字符。如果在同一毫秒内生成两个 ID,则发生冲突的几率约为 830 万分之一。上级认为这是可以接受的。

罗恩·多布利

如果您使用 Composer 或外部库,请参阅https://github.com/ramsey/uuid

或者这个功能可以满足您的需求。根据您的需要strtoupper,结果:

/**
 * generate
 *
 * Returns a version 4 UUID
 *
 * @access public
 * @return string
 */
public static function generate()
{
    $data = openssl_random_pseudo_bytes(16);

    $data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0100
    $data[8] = chr(ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10

    return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}

https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_(random)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

生成永远不会重复的数据库ID的随机整数

来自分类Dev

如何使用随机生成的ID将现有数据更新到Firebase实时数据库中的数据

来自分类Dev

当ID为null并在数据库中自动生成时持久存在实体

来自分类Dev

自动为C#中的Access数据库生成ID

来自分类Dev

自动为C#中的Access数据库生成ID

来自分类Dev

尝试在数据库中保存新的实体,但生成的ID为空

来自分类Dev

Jmeter是否将随机生成的email id(预处理器-用户参数)保存在数据库中

来自分类Dev

单击按钮从数据库中获取随机 ID

来自分类Dev

在视图中列出ID为ID的数据库条目

来自分类Dev

将时间戳自动生成为数据库的ID?

来自分类Dev

将数据库ID混淆为面向客户的号码

来自分类Dev

数据库表为空时如何从数据库获取最大ID?

来自分类Dev

为什么网站使用随机字母数字ID而不是数据库ID来标识内容?

来自分类Dev

为MySQL数据库生成随机名称

来自分类Dev

MySQL数据库ID

来自分类Dev

MySQL数据库ID

来自分类Dev

从数据库打印ID

来自分类Dev

为模型生成唯一的随机 ID

来自分类Dev

可能在刷新时显示来自PHP数据库的随机ID?

来自分类Dev

MVC ModelState错误“ ID字段是必需的”尽管数据库生成一个ID

来自分类Dev

如何在不提供ID的情况下自动生成Room数据库ID

来自分类Dev

使用StringObjectIdGenerator映射的ID在数据库中生成字符串_id

来自分类Dev

MVC ModelState错误“ ID字段是必需的”尽管数据库生成一个ID

来自分类Dev

代码优先EF:在数据库生成期间未将枚举ID添加到数据库

来自分类Dev

数据库中最后插入的行ID已成功插入,但要获得的ID为0?

来自分类Dev

创建使用数据库优先模型后,如何在实体框架中设置由数据库在数据库中生成的ID密钥

来自分类Dev

用户选择标签选择的数据库条目为NULL。如何在数据库中放置选择ID?

来自分类Dev

找不到ID为“:”的数据库实例。请指定一个有效的数据库实例

来自分类Dev

为什么使用应用程序生成自定义uuid而不是数据库ID?

Related 相关文章

  1. 1

    生成永远不会重复的数据库ID的随机整数

  2. 2

    如何使用随机生成的ID将现有数据更新到Firebase实时数据库中的数据

  3. 3

    当ID为null并在数据库中自动生成时持久存在实体

  4. 4

    自动为C#中的Access数据库生成ID

  5. 5

    自动为C#中的Access数据库生成ID

  6. 6

    尝试在数据库中保存新的实体,但生成的ID为空

  7. 7

    Jmeter是否将随机生成的email id(预处理器-用户参数)保存在数据库中

  8. 8

    单击按钮从数据库中获取随机 ID

  9. 9

    在视图中列出ID为ID的数据库条目

  10. 10

    将时间戳自动生成为数据库的ID?

  11. 11

    将数据库ID混淆为面向客户的号码

  12. 12

    数据库表为空时如何从数据库获取最大ID?

  13. 13

    为什么网站使用随机字母数字ID而不是数据库ID来标识内容?

  14. 14

    为MySQL数据库生成随机名称

  15. 15

    MySQL数据库ID

  16. 16

    MySQL数据库ID

  17. 17

    从数据库打印ID

  18. 18

    为模型生成唯一的随机 ID

  19. 19

    可能在刷新时显示来自PHP数据库的随机ID?

  20. 20

    MVC ModelState错误“ ID字段是必需的”尽管数据库生成一个ID

  21. 21

    如何在不提供ID的情况下自动生成Room数据库ID

  22. 22

    使用StringObjectIdGenerator映射的ID在数据库中生成字符串_id

  23. 23

    MVC ModelState错误“ ID字段是必需的”尽管数据库生成一个ID

  24. 24

    代码优先EF:在数据库生成期间未将枚举ID添加到数据库

  25. 25

    数据库中最后插入的行ID已成功插入,但要获得的ID为0?

  26. 26

    创建使用数据库优先模型后,如何在实体框架中设置由数据库在数据库中生成的ID密钥

  27. 27

    用户选择标签选择的数据库条目为NULL。如何在数据库中放置选择ID?

  28. 28

    找不到ID为“:”的数据库实例。请指定一个有效的数据库实例

  29. 29

    为什么使用应用程序生成自定义uuid而不是数据库ID?

热门标签

归档