【问题标题】:Create short unique IDs (chars and numbers) that 'looks' pretty... like YouTube IDs (PHP)创建“看起来”很漂亮的简短唯一 ID(字符和数字)......就像 YouTube ID (PHP)
【发布时间】:2012-01-03 22:52:47
【问题描述】:

我希望能够从一个整数中生成一个唯一的字符串 id。

例如,“1”转换为“o7wu”,反之亦然。 (使用数字搜索数据库和显示的字符串)

我发现了这个很棒的功能:http://kevin.vanzonneveld.net/techblog/article/create_short_ids_with_php_like_youtube_or_tinyurl/,但是生成的 id 对于小数字来说真的,例如 “1”是“aacd”,“2”是“aadd”。我还发现了http://blog.kevburnsjr.com/php-unique-hash,生成的 id 看起来很棒,但我认为它们只是“一种方式”。

我真的不需要任何类型的加密,我只需要它简短、漂亮。

对于那些对我对漂亮 ID 的定义感到困惑的人:我将漂亮定义为真正随机混合的字符和整数。不是:aabb33、abc123、aa22cc。 YES: dfh7, ao8f, z6t4 .. 等等...

【问题讨论】:

  • 为什么丑很重要? o7wu 很漂亮,而 aacd 不漂亮——你一定是个现代艺术评论家
  • 顺便说一句,我是一名现代艺术评论家 :) 我将漂亮定义为真正随机混合的字符和整数。aabbc、11aac、1a2b3c 不漂亮,w9d6a、qi51m 和 ap3o 漂亮,甚至漂亮。
  • 如果您真的关心他们的“漂亮”,只需将数字映射到您发现的漂亮字符串即可。另外,我不太明白将 1 更改为 "o7wu" 是如何通过任何想象来缩短它的。
  • @Jonathan:aaaaaaaqi51m 一样“随机”。你可能想要更少的“真实”随机性;-)
  • @jprofitt:加倍努力,试试你的想象力:像 9999999999 转换为 asjt3。

标签: php encryption hash url-shortener


【解决方案1】:

随机数生成器可以被破解以减少随机数。实际上,您可以让他们每次都使用相同的数字。如果将种子设置为相同的数字,您将获得相同的序列。这是一个通过传递单个数字创建“随机”字符串的示例。

<?php
$n = 1;

// Any number to be added to the random seed
// Different numbers give different sequences
$offset = 45;

srand($n + $offset);
$code = '';

for($i=0; $i<4; $i++) {
    // Numbers and letters
    $char = rand(48, 57+26);

    // Lower case letters
    if ($char > 57) $char += 39;
    $code .= chr($char);
}

echo "The code is $code\n";

有了这个偏移量,1 给出 'ghep',2 给出 'tw70',3 给出 'ob0c'。要增加字符数,请将 $i&lt;4 更改为 5 或 13。要更改包含的字符,请使用不同范围的 ASCII codes

【讨论】:

    【解决方案2】:

    我也尝试了第一个链接,但提供的代码收效甚微。我做了一些研究,我认为 YouTube ID 基本上只是随机生成的字符串(鉴于有近 74 quintillion 可能的组合,两个 ID 相同的可能性非常小)。下面是一个小的 PHP 脚本,我用它来创建 11 个字符的 YouTube 样式的随机 ID。

    $length = 11;
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-';
    
    $random_id = "";
    
    for ($i = 0; $length > $i; $i++) {
        $random_id .= $characters[mt_rand(0, strlen($characters) -1)];
    }
    

    上面的脚本基本上创建了一个包含 64 个字符的列表,与 YouTube 使用的字符相同,随机选择其中的 11 个字符,然后将它们全部连接到一个 for 循环中。然后,我将生成的随机 ID 存储在通过 URL 搜索的随机 ID 的列中。它不包括加密,但它是我能想到的最接近的东西。您可以通过更改 $length 变量来更改字符串的长度,并通过更改构成 $characters 变量的字符来更改使用的字符。

    小提示,如果您使用的是 MySQL 数据库,请将随机 ID 列的排序规则更改为 latin1_bin,这样您可以区分大小写。

    【讨论】:

      猜你喜欢
      • 2013-11-17
      • 2011-08-22
      • 2020-06-20
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      相关资源
      最近更新 更多