当前位置: 首页 > 面试题库 >

PHP中的短唯一ID

顾磊
2023-03-14
问题内容

我想创建一个唯一的ID,但uniqid()给出类似的信息'492607b0ee414'。我想要的是与tinyurl提供的类似的东西:'64k8ra'。越短越好。唯一的要求是,它不应具有明显的顺序,并且应比看似随机的数字序列更漂亮。字母优先于数字,理想情况下,字母不能混合使用。由于条目数量不会那么多(最多10000个左右),因此碰撞的风险并不是一个很大的因素。

任何建议表示赞赏。


问题答案:

制作一个小函数,该函数返回给定长度的随机字母:

<?php
function generate_random_letters($length) {
    $random = '';
    for ($i = 0; $i < $length; $i++) {
        $random .= chr(rand(ord('a'), ord('z')));
    }
    return $random;
}

然后,您将需要使用伪代码来调用它,直到它唯一为止,具体取决于您将信息存储在何处:

do {
    $unique = generate_random_letters(6);
} while (is_in_table($unique));
add_to_table($unique);

您可能还想确保字母在词典中不构成单词。可能是整个英语词典,或者只是一个坏词词典,以避免客户发现不良口味。

编辑:我也只会在您打算使用它时才有意义,因为它不是用于大量物品,因为您遇到的冲突越多(获取表中已有的ID),它的速度可能会变得很慢。当然,您需要索引表,并且需要调整ID中的字母数以避免冲突。在这种情况下,如果有6个字母,您将有26
^ 6 = 308915776可能的唯一ID(减去错误词),足以满足您的10000个需求。

编辑:如果您想要字母和数字的组合,可以使用以下代码:

$random .= rand(0, 1) ? rand(0, 9) : chr(rand(ord('a'), ord('z')));


 类似资料:
  • 问题内容: 我需要将一些文件转换为PDF,然后将它们附加到电子邮件中。我将Pear Mail用于其电子邮件方面,这很好(大多数情况下- 仍在解决一些问题),但是作为此过程的一部分,我需要创建临时文件。现在我可以使用tempnam()函数,但听起来好像它在文件系统上创建了一个文件,这不是我想要的。 我只想要临时文件系统中的名称(使用sys_get_temp_dir()),该名称不会与运行同一用户同一

  • 本文向大家介绍3种php生成唯一id的方法,包括了3种php生成唯一id的方法的使用技巧和注意事项,需要的朋友参考一下 小编在网上查了许多关于php生成唯一id方法的文章,发现有很多的方法,特整理本文与大家分享php生成唯一id的解决方法,希望大家喜欢。 1、md5(time() . mt_rand(1,1000000));   这种方法有一定的概率会出现重复 2、php内置函数uniqid()

  • 本文向大家介绍PHP生成唯一订单号,包括了PHP生成唯一订单号的使用技巧和注意事项,需要的朋友参考一下 在网上找了一番,发现这位同学的想法挺不错的,redtamo,具体的请稳步过去看看,我作简要概述,该方法用上了英文字母、年月日、Unix 时间戳和微秒数、随机数,重复的可能性大大降低,还是很不错的。使用字母很有代表性,一个字母对应一个年份,总共16位,不多也不少. 1. 生成效果: 2. 输出结果

  • 本文向大家介绍PHP生成唯一ID之SnowFlake算法,包括了PHP生成唯一ID之SnowFlake算法的使用技巧和注意事项,需要的朋友参考一下 前言:最近需要做一套CMS系统,由于功能比较单一,而且要求灵活,所以放弃了WP这样的成熟系统,自己做一套相对简单一点的。文章的详情页URL想要做成url伪静态的格式即xxx.html 其中xxx考虑过直接用自增主键,但是感觉这样有点暴露文章数量,有同学

  • 问题内容: 我对数据库表中的唯一行有问题,现在可以这样做: 当我在所有列中使用UNIQUE属性时,即使第二个Moore名称不同,我也会插入第二个Moore错误:/ 如何使用UNIQUE(或INDEX?)在db表中执行类似的操作: 抱歉,如果问题很简单,但是我是sql的初学者,并且在使用UNIQUE之类的UNIQUE时找到一些好的示例时遇到问题:/或者也许我必须在插入新行之前从db中选择一个表并检查

  • 问题内容: 我有一个像这样的数组: 如何删除重复的值,以便得到此信息: 我尝试使用array_unique,但是我认为由于该数组是多维的,因此无法正常工作。 编辑:我还需要此数组是多维的,并且以这种格式,我不能展平它。 问题答案: 在比较值以查找唯一值之前正在使用字符串转换: 注意 :当且仅当时,两个元素才被视为相等。换句话说:当字符串表示相同时。将使用第一个元素。 但是数组将始终转换为: 您可以