8

誰かがアクセスするたびに、自分のWebサイトにランダムなシリアルを作成してもらいたいです。

シリアルの形式はXXXXX-XXXXX-XXXXX-XXXXXである必要があります。

Xは乱数または大文字を表します。


残念ながら、これを行う方法がわかりません。誰か助けてくれませんか?

たとえば、ランダムシリアル出力は次のようになります。3WT4A-NB34O-JU87P-B3UHSどうも


ありがとうございました!

4

7 に答える 7

12

もう1つのアプローチは、4つのセグメントを基数36の乱数として計算することです。

function generate_serial() {
    static $max = 60466175; // ZZZZZZ in decimal
    return strtoupper(sprintf(
        "%05s-%05s-%05s-%05s",
        base_convert(random_int(0, $max), 10, 36),
        base_convert(random_int(0, $max), 10, 36),
        base_convert(random_int(0, $max), 10, 36),
        base_convert(random_int(0, $max), 10, 36)
    ));
}
于 2012-05-01T18:17:03.630 に答える
6

最も簡単な解決策は、次のようなものです。

$tokens = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

$serial = '';

for ($i = 0; $i < 4; $i++) {
    for ($j = 0; $j < 5; $j++) {
        $serial .= $tokens[rand(0, 35)];
    }

    if ($i < 3) {
        $serial .= '-';
    }
}

echo $serial;

サンプル出力:

51C8A-P9NZD-UM37Q-YKZHO
于 2012-05-01T17:37:15.467 に答える
5

それを行うには間違いなくより良い方法がありますが、これが最初に頭に浮かぶ方法です。

$chars = array(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
$serial = '';
$max = count($chars)-1;
for($i=0;$i<20;$i++){
    $serial .= (!($i % 5) && $i ? '-' : '').$chars[rand(0, $max)];
}

05/26/13編集:カウント関数をループの外側に保持することをお勧めします。この理由は、この関数を1回だけ実行できる場合、各反復でこの関数を実行するために余分なクロックサイクルを費やしたくないためです。

于 2012-05-01T17:27:11.727 に答える
4

これにアプローチする方法はたくさんあります。簡単なものの1つは次のとおりです。

$string1 = substr(md5(uniqid(rand(), true)), -5, 5);
$string2 = substr(md5(uniqid(rand(), true)), -5, 5);
$string3 = substr(md5(uniqid(rand(), true)), -5, 5);
$string4 = substr(md5(uniqid(rand(), true)), -5, 5);
$serial  = sprintf('%s-%s-%s-%s', $string1, $string2, $string3, $string4);

これよりもランダムな文字列を生成するためのより良い方法がありますが、これはあなたが探している基本的な機能を提供します。

于 2012-05-01T17:27:40.027 に答える
2

これを試して

function rand_string( $length ) {
    $length += 3;
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";  
    $str= "";
    $size = strlen( $chars );
    for( $i = 0; $i < $length; $i++ ) {
            if($i == 5 || $i == 11 || $i == 17 )
                $str .= '-';
            else
                $str .= $chars[ rand( 0, $size - 1 ) ];
    }

    return $str;
}

$getstring = rand_string(20,5);
echo $getstring;
于 2012-05-01T17:35:51.297 に答える
2

一意性のためだけにこのシリアルを使用したい場合は、ここでの回答の1つで説明されているように、UUIDv4を使用することもできます。v4UUIDを生成するPHP関数

于 2012-05-01T17:39:08.483 に答える
1

SOにはそのような答えがたくさんあります:https ://stackoverflow.com/a/4356295/1091195

ここに記載されているランダム文字列ジェネレーターを使用できます。1回使用して20文字の文字列を取得してからダッシュを挿入するか、4回呼び出して5文字で結果を連結します。

于 2012-05-01T17:22:10.107 に答える