<?php /** * PasswordMaker * パスワード生成のためのロジック * Javaクラスbiz.tailwalk.util.PasswrodMakerの焼き直し * $Id: PasswordMaker.inc,v 1.1 2015/10/08 11:18:56 wanggb Exp $ * @author iimuro * @access public * @package jp.aimslib2.util */ class PasswordMaker { /** * <pre> * 数字とアルファベット。人間が間違えやすい、01lo などの文字を含みません。 * 23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz * </pre> */ public $human_chars = "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz"; /** * <pre> * 数字と小文字アルファベット。人間が間違えやすい、01lo などの文字を含みません。 * 23456789abcdefghijkmnpqrstuvwxyz * </pre> */ public $human_lower_chars = "23456789abcdefghijkmnpqrstuvwxyz"; /** * <pre> * 数字と大文字アルファベット。人間が間違えやすい、01lo などの文字を含みません。 * 23456789ABCDEFGHJKLMNPQRSTUVWXYZ * </pre> */ public $upper_lower_chars = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"; /** * <pre> * 数字とアルファベットと記号。人間が間違えやすい、01lo| などの文字を含みません。 * 23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz_!\"#$%&'()=~^-+/*,.[]{}@`;:<>? * </pre> */ public $human_texts = "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz_!\"#\$%&'()=~^-+/*,.[]{}@`;:<>?"; /** * <pre> * 数字とアルファベット。 * 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz * </pre> */ public $chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; /** * <pre> * 数字とアルファベットと記号。 * 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_!\"#\$%&'()=~^-+/*,.[]{}\\|@`;:<>? * </pre> */ public $texts = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_!\"#\$%&'()=~^-+/*,.[]{}\\|@`;:<>?"; /** * <pre> * 数字。 * 0123456789 * </pre> */ public $numbers = "0123456789"; /** * <pre> * アルファベット。 * ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz * </pre> */ public $alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; /** * <pre> * 大文字アルファベット。 * ABCDEFGHIJKLMNOPQRSTUVWXYZ * </pre> */ public $upper_alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; /** * <pre> * 小文字アルファベット * abcdefghijklmnopqrstuvwxyz * </pre> */ public $lower_alphabets = "abcdefghijklmnopqrstuvwxyz"; /** * <pre> * 記号。 * _\"#$%&'()=~|^-+/*,.[]{}\\|@`;:<>? * </pre> */ public $signs = "_\"#\$%&'()=~|^-+/*,.[]{}\\|@`;:<>?"; /** * Singletonインスタンスの取得 */ public static function &getInstance() { static $_me; if (!is_object($_me)) { $_me = new PasswordMaker(); } return $_me; } /** * private constructor. */ public function __construct() { } /** * 数字とアルファベットのパスワードを生成します。<br> * 人間が間違えやすい、01lo などの文字を含みません。<br> * 23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz * @param min パスワードの最小桁数 * @param max パスワードの最大桁数 * @return String パスワード * @see AsciiChars#HumanChars */ public static function humanChars($min, $max = -1){ $password = new PasswordMaker(); return PasswordMaker::generate($password->human_chars, $min, $max); } /** * 数字とアルファベットと記号のパスワードを生成します。<br> * 人間が間違えやすい、01lo| などの文字を含みません。<br> * 23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz_!\"#$%&'()=~^-+/*,.[]{}@`;:<>? * @param min パスワードの最小桁数 * @param max パスワードの最大桁数 * @return String パスワード * @see AsciiChars#HumanTexts */ public static function humanTexts($min, $max = -1){ $password = new PasswordMaker(); return PasswordMaker::generate($password->human_texts, $min, $max); } /** * 数字とアルファベットのパスワードを生成します。<br> * 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz * @param min パスワードの最小桁数 * @param max パスワードの最大桁数 * @return String パスワード * @see AsciiChars#Chars */ public static function chars($min, $max = -1){ $password = new PasswordMaker(); return PasswordMaker::generate($password->chars, $min, $max); } /** * 数字とアルファベットと記号のパスワードを生成します。<br> * 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_!\"#$%&'()=~^-+/*,.[]{}\\|@`;:<>? * @param min パスワードの最小桁数 * @param max パスワードの最大桁数 * @return String パスワード * @see AsciiChars#Texts */ public static function texts($min, $max = -1){ $password = new PasswordMaker(); return PasswordMaker::generate($password->texts, $min, $max); } /** * 数字のパスワードを生成します。<br> * 0123456789 * @param min パスワードの最小桁数 * @param max パスワードの最大桁数 * @return String パスワード * @see AsciiChars#Numbers */ public static function numbers($min, $max = -1){ $password = new PasswordMaker(); return PasswordMaker::generate($password->numbers, $min, $max); } /** * アルファベットのパスワードを生成します。<br> * ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz * @param min パスワードの最小桁数 * @param max パスワードの最大桁数 * @return String パスワード * @see AsciiChars#Alphabets */ public static function alphabets($min, $max = -1){ $password = new PasswordMaker(); return PasswordMaker::generate($password->alphabets, $min, $max); } /** * 大文字アルファベットのパスワードを生成します。<br> * ABCDEFGHIJKLMNOPQRSTUVWXYZ * @param min パスワードの最小桁数 * @param max パスワードの最大桁数 * @return String パスワード * @see AsciiChars#UpperAlphabets */ public static function upperAlphabets($min, $max = -1){ $password = new PasswordMaker(); return PasswordMaker::generate($password->upper_alphabets, $min, $max); } /** * 小文字アルファベットのパスワードを生成します。<br> * abcdefghijklmnopqrstuvwxyz * @param min パスワードの最小桁数 * @param max パスワードの最大桁数 * @return String パスワード * @see AsciiChars#LowerAlphabets */ public static function lowerAlphabets($min, $max = -1){ $password = new PasswordMaker(); return PasswordMaker::generate($password->lower_alphabets, $min, $max); } /** * 記号のパスワードを生成します。<br> * _\"#$%&'()=~|^-+/*,.[]{}\\|@`;:<>? * @param min パスワードの最小桁数 * @param max パスワードの最大桁数 * @return String パスワード * @see AsciiChars#Signs */ public static function signs($min, $max = -1){ $password = new PasswordMaker(); return PasswordMaker::generate($password->signs, $min, $max); } /** * 指定した文字を使用して、パスワードを生成します。 * @param words パスワードに使用する文字。 * @param figure パスワードの桁数 * @return String パスワード */ public static function generate($words, $min, $max = -1){ $figure = PasswordMaker::randomLength($min, $max); $buf = ""; //StringBuffer buf = new StringBuffer(); for($i=0; $i < $figure; $i++){ $buf .= PasswordMaker::randomSelect($words); } return $buf; } public static function randomSelect($words){ $select = rand(0, strlen($words) - 1); return substr($words, $select, 1); } /** * 適当な長さを返します。 */ public static function randomLength($min, $max) { if ($min < $max) { list($usec, $sec) = explode(' ', microtime()); srand((float) $sec + ((float) $usec * 100000)); $figure = rand($min, $max); } else { $figure = $min; } return $figure; } } ?>