この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
PHP プログラムによるパスワードの作り方
インターネットで検索するとパスワードを作成するプログラムは見つかるものの、アルファベット小文字や大文字だけで文字列を作るプログラムが多く、文字列の長さを設定するだけのものがほとんど。
ただパスワードの生成である以上、
・アルファベット(大文字)
・アルファベット(小文字)
・数字
・記号
・アルファベット(小文字)
・数字
・記号
を ON / OFF できる汎用的なプログラムが欲しいと思いましたが、見当たらなかったので自分で作成してみました。
パスワードを生成するプログラム
プログラムを作成するにあたり、機能を詰め込んだので補足情報を記載しておきます。
パスワードの生成としている関係上、似通った文字を省く機能が欲しいので、変数「$isResembleStr」を設定しています。「$isResembleStr = true」で関数を呼び出してもらうと似通った文字である
「I = 英字(大文字)のアイ」
「l = 英字(小文字)のエル」
「1 = 数字のイチ」
「O = 英字(大文字)のオー」
「o = 英字(小文字)のオー」
「0 = 数字のゼロ」
「l = 英字(小文字)のエル」
「1 = 数字のイチ」
「O = 英字(大文字)のオー」
「o = 英字(小文字)のオー」
「0 = 数字のゼロ」
の6つを含まない文字列を作成します。
次に変数「$isSymbol = true」と記号も文字列として使用する場合は、下記の16種類が選択される可能性があります。
!#$%&?*+–_|~,.:;
補足説明は以上となります。
〇パスワードを生成するサンプルプログラム
<?php
/**
* ランダムな文字列を作成する
*
* $length : 文字列の長さ
* $isResembleStr : 似通った文字を使用するか
* $isBigAlphabet : アルファベット大文字を使用するか
* $isSmallAlphabet : アルファベット小文字を使用するか
* $isNumeric : 数字を使用するか
* $isSymbol : 記号を使用するか
**/
function createRandomStr($length, $isResembleStr = false, $isBigAlphabet = true, $isSmallAlphabet = true, $isNumeric = true, $isSymbol = false) {
//文字数が 0 文字以下、1001文字以上の場合は NULL を返す
if( $length <= 0 || $length >= 1001) {
return null;
}
//生成する文字がない場合は NULL を返す
if( !$isBigAlphabet && !$isSmallAlphabet && !$isNumeric && !$isSymbol) {
return null;
}
$selectStr = [];
if($isSmallAlphabet) { //選択する文字に英字(大文字)を追加する
$selectStr = array_merge( $selectStr, range('a', 'z') );
}
if($isBigAlphabet) { //選択する文字に英字(小文字)を追加する
$selectStr = array_merge( $selectStr, range('A', 'Z') );
}
if($isNumeric) { //選択する文字に数字を追加する
$selectStr = array_merge( $selectStr, range('0', '9') );
}
if($isSymbol) { //選択する文字に記号を追加する
$selectStr = array_merge( $selectStr, ['!','#','$','%','&','?','*','+','–','_','|','~',',','.',':',';'] );
}
if(!$isResembleStr) { //似通った文字を除外する
$selectStr = array_diff($selectStr, ['I', 'l', '1', 'O', 'o', '0']);
}
//文字列を生成する
$createStr = '';
for ( $i = 0; $i < $length; $i++ ) {
$createStr .= $selectStr[rand(0, count($selectStr)-1)];
}
return $createStr;
}
さいごに
PHP7.2 にて動作検証していますが、細かい動作要件は確認していないのでご自身の環境に合わせて調整して下さい。
なお配列の定義に array を使っていないので、PHP5.4必須なはずです(苦笑)
ウェブプログラミングについては下記の本も参考になるので、スキルアップにお役立てください。


