PHP でランダムな文字列を生成する

Muhammad Abubakar 2023年1月30日
  1. PHP でランダムな文字列を生成する
  2. uniqid() 関数を使用してランダムな文字列を生成する
  3. PHP の str_shuffle($string) 関数を使用してランダムな文字列を生成する
  4. PHP でランダムな 16 進文字列を生成する
  5. PHP で暗号的に安全なランダム文字列を生成する
PHP でランダムな文字列を生成する

このチュートリアル記事では、PHP でランダムな文字列を生成する方法について説明します。

PHP でランダムな文字列を生成する

PHP でランダム文字列ジェネレーター関数を定義します。

<?php
function random_str_generator ($len_of_gen_str){
    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    $var_size = strlen($chars);
    echo "Random string ="; 
    for( $x = 0; $x < $len_of_gen_str; $x++ ) {
        $random_str= $chars[ rand( 0, $var_size - 1 ) ];  
        echo $random_str;  
    }
echo "\n";
}
random_str_generator (8)
?>

出力:

Random string =ExmIixDb

宣言された変数でアルファベットだけを取る必要はありません。ランダムに生成される文字列に、数値や記号など、必要なものを追加することもできます。

4 行目では、strlen() 関数を使用して宣言された変数の長さを取得します。rand( 0, $var_size - 1 ) が特定の指定された範囲からインデックスを生成し、その値を新しく作成された変数に追加するのに役立ち、ループは rand( 0, $var_size - 1 ) が特定の長さを生成するのに役立ちます文字列の。

uniqid() 関数を使用してランダムな文字列を生成する

これは、組み込み関数 uniqid() を使用してランダムな文字列を生成するもう 1つの方法です。現在のタイムスタンプに基づいて、13 文字の長い一意の識別子を生成します。解決策は次のとおりです。

<?php 
$Random_str = uniqid();  
echo "Random String:", $Random_str, "\n";
?> 

出力:

Random String:606208975a59f

uniqid() 関数は、文字列または識別子の一意性を高める可能性のあるパラメータも受け入れます。それはあなたにもっと説明された価値を与えます。その解決策のいくつかを次に示します。

<?php 
echo uniqid('user_');
?> 

出力:

user_60620a2b23235 

PHP の str_shuffle($string) 関数を使用してランダムな文字列を生成する

str_shuffle($string) は組み込み関数であり、ループと rand() 組み込み関数を使用してランダム文字列を生成することを上で見たように、ランダム文字列ジェネレーター関数として機能しますが、それも違います。組み込み関数のみを使用して一意の文字列を生成します。これは、範囲を (str_shuffle($string),0,x(any number)) に指定することで、要求の厳しい長さの一意のパスワードを作成するのに役立ちます。

<?php
 $x = 0;
 $y = 10;
$Strings = '0123456789abcdefghijklmnopqrstuvwxyz';
echo "Gen_rand_str: ",substr(str_shuffle($Strings), $x, $y), "\n";

$a = 0;
$b = 20;
$Strings='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
echo "Gen_My_Pass: ",'hello.'.substr(str_shuffle($Strings), $a, $b).'.World',"\n";
?>

出力:

Gen_rand_str: b38aenwpkh
Gen_My_Pass: hello.EUMm4TB26CltW8qYnApF.World

また、URL、ランダムなファイル名などを生成するのにも役立つ場合があります。上記のジェネレータよりも安全で、予測が複雑です。

この方法はより正確ですが、ランダムな文字列に同じ文字を 2 回指定できない、入力文字列を指定するとランダムな出力が長くなるなどの問題があります。

PHP でランダムな 16 進文字列を生成する

md5($string, $raw_output) および sha1($string,$raw_output) 関数は、ランダムな 16 進文字列を生成するのに役立ちます。これらの関数では、出力を実現するための入力として time() を使用し、32 文字の 16 進文字列が必要な場合は、md5() を使用し、40 文字の場合は sha1()を使用します。。最後に、substr() 関数を使用して、指定した長さのランダムな文字列を抽出することもできます。

<?php
 
echo "Out1: ",substr(md5(time()), 0, 16),"\n";
 
echo "Out2: ",substr(sha1(time()), 0, 16),"\n";
 
echo "Out3: ",md5(time()),"\n";
 
echo "Out4: ",sha1(time()),"\n";
 
?>

出力:

Out1: fcc78a076a5b743d
Out2: ae03e817c0dc6048
Out3: fcc78a076a5b743d8916038b48a6b0ee
Out4: ae03e817c0dc6048c19b708ce411a058294425b1

PHP で暗号的に安全なランダム文字列を生成する

このジェネレーターは、PHP の最も重要で役立つ機能です。上記で説明するすべてのジェネレータは、暗号的に安全ではありません。暗号的に安全であるということは、ランダムな文字列も生成できることを意味しますが、サードパーティが同じ乱数を生成することは困難です。そのため、暗号的に安全であると言えます。

random_bytes($length) は、暗号的に安全なランダム文字列を生成できる関数です。ユーザーが長さパラメーターを指定します。以下の例を参照してください。

<?php
 
echo "Output-1: ",bin2hex(random_bytes(10)),"\n";
 
echo "Output-2: ",bin2hex(random_bytes(20)),"\n";
 
echo "Output-3: ",bin2hex(random_bytes(24)),"\n";
 
?>

出力:

Output-1: 911fc716798ce464c7c3
Output-2: 182fedf65a90b66139d80dbfc0f82912b73f37cd
Output-3: c3408d3a0dea41251dce940fe550452ca180cf5effaad235

上記のコードで見たように、bin2hex() 関数を使用しました。random_bytes($length) が特定の出力を提供する場合、bin2hex() はそれを 16 進値に変換します。これにより、関数 random_bytes($length) の値が 2 倍になる可能性があります。

openssl_random_pseudo_bytes($length, &$crypto_strong) 関数は、ランダムに暗号化された文字列を生成するためにも使用されます。crypto_strong パラメータは、文字列が暗号的に安全なアルゴリズムから生成されているかどうかを分析するために使用されます。

a から z までのすべての文字列を利用する暗号的に安全なランダム文字列が必要な場合は、以下のコードを使用します。

<?php
 
function secure_random_string($length) {
    $rand_string = '';
    for($i = 0; $i < $length; $i++) {
        $number = random_int(0, 36);
        $character = base_convert($number, 10, 36);
        $rand_string .= $character;
    }
 
    return $rand_string;
}
 
echo "Sec_Out_1: ",secure_random_string(10),"\n";
 
echo  "Sec_Out_2: ",secure_random_string(10),"\n";
 
echo  "Sec_Out_3: ",secure_random_string(10),"\n";
 
?>

出力:

Sec_Out_1: znxtaqynoi
Sec_Out_2: 10k10zkddntm
Sec_Out_3: ook8gfck6u

ランダムな文字列の長さは、secure_random_string() 関数で指定します。この関数では、random_int() が指定された特定の範囲からランダムな整数を生成するループを使用します。その後、base_convert() 関数を使用して、基数 10 から 36 までの整数を変換します。最終的に、結果の文字は 0〜9 の任意の数字と、a〜z の任意の文字になります。これは、ランダムに暗号化された文字列を生成するもう 1つの方法です。

関連記事 - PHP String