ホームページ >バックエンド開発 >PHPチュートリアル >[PHP] openssl_random_pseudo_bytes 関数と Base64_encode 関数を使用してランダムな文字列を生成する
[PHP] openssl_random_pseudo_bytes 関数と Base64_encode 関数を使用してランダムな文字列を生成する
openssl_random_pseudo_bytes 関数自体は、指定された数のランダムなバイトを生成するために使用されるため、ランダムな文字列を生成するために使用する場合は、次の関数も必要です。関数base64_encodeを一緒に使用します。以下に示すように:
<code class="language-php hljs "><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getRandomString</span><span class="hljs-params">(<span class="hljs-variable">$length</span> = <span class="hljs-number">42</span>)</span> {</span> <span class="hljs-comment">/* * Use OpenSSL (if available) */</span> <span class="hljs-keyword">if</span> (function_exists(<span class="hljs-string">'openssl_random_pseudo_bytes'</span>)) { <span class="hljs-variable">$bytes</span> = openssl_random_pseudo_bytes(<span class="hljs-variable">$length</span> * <span class="hljs-number">2</span>); <span class="hljs-keyword">if</span> (<span class="hljs-variable">$bytes</span> === <span class="hljs-keyword">false</span>) <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> RuntimeException(<span class="hljs-string">'Unable to generate a random string'</span>); <span class="hljs-keyword">return</span> substr(str_replace([<span class="hljs-string">'/'</span>, <span class="hljs-string">'+'</span>, <span class="hljs-string">'='</span>], <span class="hljs-string">''</span>, base64_encode(<span class="hljs-variable">$bytes</span>)), <span class="hljs-number">0</span>, <span class="hljs-variable">$length</span>); } <span class="hljs-variable">$pool</span> = <span class="hljs-string">'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'</span>; <span class="hljs-keyword">return</span> substr(str_shuffle(str_repeat(<span class="hljs-variable">$pool</span>, <span class="hljs-number">5</span>)), <span class="hljs-number">0</span>, <span class="hljs-variable">$length</span>); }</code>
base64_encode 関数を呼び出した後、ランダムに生成された文字列内の不要な文字を削除するために、結果に対して置換操作も実行されます。
もちろん、openssl_random_pseudo_bytes 関数を使用する前に、function_exists を使用して関数が実行時に使用可能であることを確認するのが最善です。利用できない場合は、プラン B を使用してください:
<code class="language-php hljs ">substr(str_shuffle(str_repeat(<span class="hljs-variable">$pool</span>, <span class="hljs-number">5</span>)), <span class="hljs-number">0</span>, <span class="hljs-variable">$length</span>);</code>
この関数は非常に多用途であり、ビジネス ニーズに応じて適切に変更して、静的メソッドとして呼び出すことができます。