技術的に言えば、YouTubeはアルゴリズムを使用してビデオIDを生成します。正直なところ、私にはわかりません。これは、ビデオファイル全体のハッシュサム+現在のUNIX時間を使用したソルトである場合もあれば、ビデオに固有の何かのbase64エンコーディングである場合もあります。しかし、ランダムではない可能性が高いことを私は知っています。ランダムである場合、衝突のリスクが高すぎるためです。
ただし、例として、YouTubeがランダムなIDを生成すると仮定します。ランダムに生成された値を使用して何かを格納する場合は、通常、衝突チェックを実装して、新しいオブジェクトが既存のオブジェクトを上書きしないようにすることをお勧めします。ただし、実際には、ハッシュアルゴリズムを使用することをお勧めします。ハッシュアルゴリズムは一方向であり、衝突を防ぐのに非常に効果的だからです。
ですから、私はPHPにあまり詳しくありません。最初にJavaScriptで書かなければなりませんでした。次に、それをPHPに移植しましたが、これは比較的単純であることがわかりました。
function randch($charset){
return $charset[rand() % strlen($charset)];
}
function randstr($len, $charset = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-"){
$out = [];
for($i = 0; $i < $len; $i++){
array_push($out, randch($charset));
}
return join("", $out);
}
len
これは、指定されたを介してランダムな文字列文字を生成しますcharset
。
出力例を次に示します。
randstr(5) -> 1EWHd
randstr(30) -> atcUVgfhAmM5bXz-3jgyRoaVnnY2jD
randstr(30, "asdfASDF") -> aFSdSAfsfSdAsSSddFFSSsdasDDaDa
このような短い文字セットを使用するのは良い考えではありませんが。
randstr(30, "asdf")
sdadfaafsdsdfsaffsddaaafdddfad
adaaaaaafdfaadsadsdafdsfdfsadd
dfaffafaaddfdddadasaaafsfssssf
randstr(30)
r5BbvJ45HEN6dWtNZc5ZvHGLCg4Qyq
50vKb1rh66WWf9RLZQY2QrMucoNicl
Mklh3zjuRqDOnVYeEY3B0V3Moia9Dn
ここで、この関数を使用してアップロードされたばかりのビデオのランダムIDを生成するようにページに指示したとします。次に、適切なページを表示するために、関連データへのリンクを含むテーブルにこのキーを格納します。$_GET
(例)を介してIDが要求された場合/watch?v=02R0-1PWdEf
、ビデオIDを含むデータベースに対してこのキーをチェックするようにページに指示できます。一致するものが見つかった場合は、そのキーからデータを取得します。それ以外の場合は、404を指定します。
ランダムにしたくない場合は、base64文字列に直接エンコードすることもできます。base64_encode()
これはとで行うことができますbase64_decode()
。たとえば、$str="filename=apples.avi;owner=coolpixlol124"
何らかの理由で、ビデオのデータが1つの文字列に含まれているとします。base64_encode($str)
あなたに与えるでしょうZmlsZW5hbWU9YXBwbGVzLmF2aTtvd25lcj1jb29scGl4bG9sMTI0
。
後でデコードするにはbase64_decode($new_str)
、を使用します。これにより、元の文字列が返されます。
ただし、前に述べたように、のようなハッシュアルゴリズムを使用することをお勧めしますSHA
。
これがお役に立てば幸いです。
編集:私は言及するのを忘れました、今のところYouTubeのビデオIDは11文字の長さなので、同じ種類のものを使用したい場合は、randstr(11)
私が得たこのサンプルIDのように11桁のランダムな文字列を生成するために使用したいと思います:6AMx8N5r6cg
編集2(2015.12.17):回答を完全に書き直しました。オリジナルはがらくたでした、私がそれを書いたときに私が何を考えていたかはわかりません。