確認用のリンクに使用する、数字と文字を使ったランダムでユニークな文字列を生成するには、どうしたらよいでしょうか?ウェブサイトでアカウントを作成すると、リンク付きのメールが送られてきて、そのリンクをクリックしないとアカウントの確認ができないような......そんな感じですね。
このようなリンクをPHPで生成するにはどうしたらよいでしょうか?
Update: uniqid()
について思い出しました。これは、マイクロ秒単位の現在時刻をもとに、一意の識別子を生成するPHPの関数です。これを使ってみようと思います。
セキュリティ上の注意:このソリューションは、乱数の品質がアプリケーションのセキュリティに影響を与えるような状況では使用しないでください。特に、
rand()
とuniqid()
は暗号的に安全な乱数生成器ではありません。安全な代替手段についてはScott's answerを参照してください。
時間が経過しても絶対に一意である必要がない場合。
md5(uniqid(rand(), true))
。
それ以外の場合(ユーザーのためのユニークなログインを既に決定している場合)は
md5(uniqid($your_user_login, true))
この機能は、数字と文字を使ってランダムなキーを生成します。
function random_string($length) {
$key = '';
$keys = array_merge(range(0, 9), range('a', 'z'));
for ($i = 0; $i < $length; $i++) {
$key .= $keys[array_rand($keys)];
}
return $key;
}
echo random_string(50);
出力例。
zsd16xzv3jsytnp87tk7ygv73k8zmr0ekh6ly7mxaeyeh46oe8
1.好みの乱数を使って乱数を生成する お気に入りの乱数発生器 ジェネレーター 2.乱数を掛けたり割ったりして 掛けたり割ったりして、コードネームの文字数と アルファベットの文字数と一致する数を求めます。 3.コードアルファベットのそのインデックスの項目を コードアルファベットのそのインデックスのアイテムを取得します。 4.欲しい長さになるまで1)を繰り返す 欲しい
例:(擬似コードの場合
int myInt = random(0, numcharacters)
char[] codealphabet = 'ABCDEF12345'
char random = codealphabet[i]
repeat until long enough