【问题标题】:Convert random text to a number with PHP使用 PHP 将随机文本转换为数字
【发布时间】:2013-07-10 11:43:04
【问题描述】:

我需要将随机文本转换为数字。但是随机文本必须始终转换为相同的数字。例如:

xxxx -> 10
testing -> 396
stackoverflow -> 72

我不能使用字符数来转换 string,因为如果我有 2 个具有相同数字 characters 的字符串,它们需要有不同的数字(至少在大多数情况下)。

我不需要在一个范围内有这个数字。不!它可以是任何数字,因为给定特定字符串,它总是相同的。

【问题讨论】:

  • 文本有什么限制,字母数字,只有字母,只有小写???
  • 这是该帖子中提供的一种缓慢的方式。 Ord 很棒,但它只适用于第一个字符!谢谢
  • 文字的约束是字母数字先生@Orangepill
  • 上下?没有空间?和其他特殊字符

标签: php string random converter


【解决方案1】:

您可以尝试使用哈希(md5sha1 等):

$number = hexdec( md5("hello world") );
$number = hexdec( sha1("hello world") );

相同字符串的哈希值将转换为相同的数字。

【讨论】:

  • A crc32 会更快,如果在这种情况下很重要的话。最后,也是最重要的一点,如果结果不能放入整数,它将转换为浮点数。
  • 也许你可以加盐来防止碰撞?
  • 无需使用 md5 或 sha1。 hexdec 将跳过非十六进制字符!
【解决方案2】:

怎么样;

$number = crc32($string);

应该便宜,提供整数输出,并为您的用例产生合理的随机性。

【讨论】:

    【解决方案3】:

    已显示的其他方法可能会发生冲突。以下不应该。

    $num = "";
    for($i = 0; $i < strlen($str); $i++)
        $num .= str_pad(ord($str[$i]), 3 "0", STR_PAD_LEFT);
    return $num;
    

    【讨论】:

    • 你会很快超过 32 位,并浪费相当多的范围。
    • 我同意这一点。我正在宣传我对crc32 的回答。
    • 如果你放弃对问题的“唯一”约束,我会同意......上帝知道它也比其他解决方案更快。
    • 我开始认为保证唯一性以及消除键冲突的唯一方法是将字符串推入数据库表中,并在字符串上设置唯一键约束并自动递增主键并返回键值。
    • 我对作者cmets的理解是,消除key冲突的可能性不是优先级的。显然,如果要进入数据库,唯一性很重要。所以我想他只需要检查生产的号码是否已经存在。
    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多