【问题标题】:Generate alphanumeric ID with PHP使用 PHP 生成字母数字 ID
【发布时间】:2016-06-06 13:06:58
【问题描述】:

我想生成某种 ID,类似于 Google 为其课堂服务生成 URL 的方式。

例如: https://classroom.google.com/u/0/c/MTg1MKIwNTk4

我希望能够生成MTg1MKIwNTk4 部分。

它不必是加密安全的或类似的东西,它只是用于 URL。

如何用 PHP (+MySQL) 做到这一点?

谢谢。

【问题讨论】:

标签: php


【解决方案1】:

使用此代码:

$charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
$str = '';
$length = strlen($charset);
$count = 12;
while ($count--) {
    $str .= $charset[mt_rand(0, $length-1)];
}
echo $str;

如果你使用 PHP7,你可以使用random_int 而不是mt_rand 来获得更好的随机数。 (由@zaph 在 cmets 中提出)。

当然,如果您想要更容易手动复制的随机字符串(例如,如果您打印 URL),那么您可以省略一些可能不明确的字符(例如“l”或'0') - (再次由 @zaph 在 cmets 中提出)

【讨论】:

  • 最好使用Base58字符集,它没有野心字符,省略的字母有:0(零)、O(大写o)、I(大写i)和l (小写 L)以及非字母数字字符 +(加号)和 /(斜杠)。
  • 最好使用random_int而不是mt_rand
  • 如果您使用 PHP7,那么这应该是选项。我会把它添加到我的答案中,谢谢@zaph
【解决方案2】:

使用md5() 结合.htaccess(Apache)/web.config(IIS) 来获取它。

您将获得一个 32 字符长度的字母数字字符串。使用substr() 剪切它

例子:

md5('helloworld') 生成fc5e038d38a57032085441e7fe7010b0

substr(md5('helloworld'),0,10) 生成 fc5e038d38

【讨论】:

  • 这个解决方案又好又短,但还不是 OP 要求的解决方案,因为字符串只能包含一小部分字符。
  • 你是对的@JoachimSchirrmacher 无论如何,如果字符串混合上下字符不是强制性的,这将起作用。无论如何,谢谢您的更正。
  • 它在哪里说 OP 只需要一小部分字符?它只规定字母数字字符。我不明白为什么这个答案被否决了。
  • 我也不知道。而且,实际上,OP 并没有说他想要一个子集,但答案仅限于这样做,因为 md5() 仅使用十六进制数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多