1

私のウェブサイトで作成されたすべてのユーザー アカウントに対して「確認コード」を作成し、個人情報と共にデータベースに保存しようとしています。以下の例でわかるように、時間変数を考慮してランダムな文字列を生成しようとしましたが、文字列が不必要に長くなります。

md5非常に低い衝突率を持つ 10 桁 (最大) の英数字文字列を生成する比較的簡単な方法があるかどうか疑問に思っていた文字列を、生成された文字列よりも短くしたい

私が試したこと:

  md5(mt_rand(10000,99999).time() . 'example@domain.com');

出力:

0dd6854dba19e70cfda0ab91595e0376
4

5 に答える 5

4

PHP は、openssl_random_pseudo_bytes必要なことを安全に行うための関数を提供します。

次のようにします。

bin2hex(openssl_random_pseudo_bytes(5))

上記はe9d196aa14、たとえばのようなものを提供します。

または、既存の MD5 文字列の最初の 10 文字を取得します。

于 2012-07-02T20:14:29.397 に答える
1

http://php.net/manual/en/function.uniqid.php

+

http://br.php.net/manual/en/function.substr.php

于 2012-07-02T20:07:44.907 に答える
0

Aa-Zzこれにより、および文字からランダムな出力文字列が生成されます0-9

function genString($length) {
    $lowercase = "qwertyuiopasdfghjklzxcvbnm";
    $uppercase = "ASDFGHJKLZXCVBNMQWERTYUIOP";
    $numbers = "1234567890";
    $specialcharacters = "{}[];:,./<>?_+~!@#";
    $randomCode = "";
    mt_srand(crc32(microtime()));
    $max = strlen($lowercase) - 1;
    for ($x = 0; $x < abs($length/3); $x++) {
        $randomCode .= $lowercase{mt_rand(0, $max)};
    }
    $max = strlen($uppercase) - 1;
    for ($x = 0; $x < abs($length/3); $x++) {
        $randomCode .= $uppercase{mt_rand(0, $max)};
    }
    $max = strlen($specialcharacters) - 1;
    for ($x = 0; $x < abs($length/3); $x++) {
        $randomCode .= $specialcharacters{mt_rand(0, $max)};
    }
    $max = strlen($numbers) - 1;
    for ($x = 0; $x < abs($length/3); $x++) {
        $randomCode .= $numbers{mt_rand(0, $max)};
    }
    return str_shuffle($randomCode);
}

使用法

$str = genString(10);
于 2012-09-22T02:42:14.007 に答える
0

最善の方法は

$random = substr(number_format(time() * rand(),0,'',''),0,10); // you can increase the digits by changing 10 to desired digit

チェックアウトしてください

于 2014-07-22T13:59:27.990 に答える
-1

http://php.net/manual/en/function.str-split.phpを使用してみてください

于 2012-07-02T20:09:52.883 に答える