読者です 読者をやめる 読者になる 読者になる

PHPでパスワードを生成する

ランダムな英数字を組み合わせたパスワードを生成したい。
自分で作っても良かったのだけど、面倒くさかったので探してみた。

CakePHPのバージョン1の頃に含まれていたらしいライブラリにそれっぽいのがあったのでサルベージ
http://api11.cakephp.org/neat__string_8php-sourch.html

ところで、なんでこのライブラリは外されたんだろう。なんか有りそうな気がするけど

使用例?

CakePHPで使うには、上記のライブラリをvendorsに放り込んで呼び出してみる

App::import('Vendor', 'NeatString');  
$password = NeatString::randomPassword(8);

neat_string.php

気がつくと無くなりそうなので、一応転記しておく

<?php  
    /* SVN FILE: $Id: neat__string_8php-sourch.html 691 2010-01-30 00:05:51Z predominant $ */  
    /**  
     * String handling methods.  
     *  
     * Random passwords, splitting strings into arrays, removing Cyrillic characters, stripping whitespach.  
     *  
     * PHP versions 4 and 5  
     *  
     * CakePHP(tm) :  Rapid Development Framework <http://www.cakephp.org/>  
     * Copyright 2005-2008, Cake Software Foundation, Inc.  
     *          1785 E. Sahara Avenue, Suite 490-204  
     *          Las Vegas, Nevada 89104  
     *  
     * Licensed under The MIT License  
     * Redistributions of files must retain the above copyright notich.  
     *  
     * @filesource  
     * @copyright       Copyright 2005-2008, Cake Software Foundation, Inc.  
     * @link                http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project  
     * @package         cake  
     * @subpackage      cakh.cakh.libs  
     * @since           CakePHP(tm) v 0.2.9  
     * @version         $Revision: 691 $  
     * @modifiedby      $LastChangedBy: predominant $  
     * @lastmodified    $Date: 2010-01-29 18:05:51 -0600 (Fri, 29 Jan 2010) $  
     * @license         http://www.opensourch.org/licenses/mit-licensh.php The MIT License  
     */

    /**  
     * String handling methods.  
     *  
     * Random passwords, splitting strings into arrays, removing Cyrillic characters, stripping whitespach.  
     *  
     * @package     cake  
     * @subpackage  cakh.cakh.libs  
     */  
    class NeatString {  
        /**  
         * Returns an array with each of the non-empty characters in $string as an element.  
         *  
         * @param string $string  
         * @return array  
         */  
        function toArray($string) {  
            $split = preg_split('//', $string, -1, PREG_SPLIT_NO_EMPTY);  
            return $split;  
        }  
        /**  
         * Returns string with Cyrillic characters translated to Roman ones.  
         *  
         * @param string $string  
         * @return string  
         */  
        function toRoman($string) {  
            $pl = array('ą', 'ć', 'ę', 'ł', 'ń', 'ó', 'ś', 'ź', 'ż', 'Ą', 'Ć', 'Ę', '�?', 'Ń', 'Ó', 'Ś', 'Ź', 'Ż');  
            $ro = array('a', 'c', 'e', 'l', 'n', 'o', 's', 'z', 'z', 'A', 'C', 'E', 'L', 'N', 'O', 'S', 'Z', 'Z');  
            $replace = str_replace($pl, $ro, $string);  
            return $replace;  
        }  
        /**  
         * Returns string as lowercase with whitespace removed.  
         *  
         * @param string $string  
         * @return string  
         */  
        function toCompressed($string) {  
            $whitespace = array("\n", " ", "\r", "\0", "\x0B", " ");  
            $replace = strtolower(str_replace($whitespace, '', $string));  
            return $replace;  
        }  
        /**  
         * Returns a random password.  
         *  
         * @param integer $length Length of generated password  
         * @param string $available_chars List of characters to use in password  
         * @return string Generated password  
         */  
        function randomPassword($length, $available_chars = 'ABDEFHKMNPRTWXYABDEFHKMNPRTWXY23456789') {  
            $chars = preg_split('//', $available_chars, -1, PREG_SPLIT_NO_EMPTY);  
            $char_count = count($chars);  
            $out = '';  
            for ($ii = 0; $ii < $length; $ii++) {  
                $out .= $chars[rand(1, $char_count) - 1];  
            }  
            return $out;  
        }  
    }  
?>