martes, 22 de julio de 2014

PHP Random Number Generator - Generador de cadenas aleatorias


La clase PHP Random Number Generator puede generar una cadena aleatoria en base al algoritmo Mersenne Twister.

Se puede generar una cadena de texto aleatoria de una determinada longitud y creada a partir de dígitos o letras en mayúsculas y minúsculas.

La clase también permite la inclusión de una lista de caracteres dados que se agregarán a la cadena generada.

Entre los archivos encontrarás una demostración a través del archivo example.php

Autor: Er. Rochak Chauhan

Descargar: PHP Random Number Generator


PhpRandomNumberGenerator.inc.php

<?php
/**
 * Class to generate random unique string and/or numbers.
 * 
 * @author Rochak Chauhan <rochakchauhan@gmail.com>
 */
class PhpRandomNumberGenerator {

    private $charLimit = 8;
    private $charArray = array();

    function generateNumber() {        
        $bits = $this->charLimit * 5;
        $nos = (int) $bits / 25;
        $random = "";
        for ($i = 0; $i <= $nos; $i++) {
            $random.=$this->getRandomBinaryNumbers();
        }
       $random = chunk_split($random, 5, "#*#");
        //Set default char set
        if (count($this->charArray) < (($this->charLimit)*2) ) {
            $this->setDefaultCharArray();
        }      
        $number = "";
        $tmpArray = explode("#*#", $random);
        foreach ($tmpArray as $ref => $b) {
            $b = bindec($b);
            $b = (int) $b;
            if ($b >= 0) {
                $c = $this->charArray[$b];
                $number.= $c;
            }
        }
        $strlen = strlen($number);
        $diff = $strlen - $this->charLimit;
        if ($diff < 0) {
            $diff = abs($diff);
            $pre = "";
            for ($i = 0; $i < $diff; $i++) {
                $pre.="0";
            }
            $number = $pre . $number;
        }
        $number = substr($number, 0, $this->charLimit);
        return $number;      
    }

    /**
     * Function to set Default Char Array
     */
    private function setDefaultCharArray() {
        $numbersArray = $this->generateNumbersArray();
        $this->charArray = array_merge($this->charArray, $numbersArray);
        $upperCaseArray = $this->generateUpperCaseArray();
        $this->charArray = array_merge($this->charArray, $upperCaseArray);
        $lowerCaseArray = $this->generateLowerCaseArray();
        $this->charArray = array_merge($this->charArray, $lowerCaseArray);        
    }

    /**
     * Function to generate lowercase alphbets array
     * 
     * @return array
     */
    private function generateLowerCaseArray() {
        $return = array();
        for ($i = 97; $i <= 122; $i++) {
            $return[] = chr($i);
        }
        return $return;
    }

    /**
     * Function to generate uppercase alphbets array
     * 
     * @return array
     */
    private function generateUpperCaseArray() {
        $return = array();
        for ($i = 65; $i <= 90; $i++) {
            $return[] = chr($i);
        }
        return $return;
    }

    /**
     * Function to generate Numbers array
     * 
     * @return array
     */
    private function generateNumbersArray() {
        $return = array();
        for ($i = 48; $i <= 57; $i++) {
            $return[] = chr($i);
        }
        return $return;
    }

    /**
     * Function to Generate Randaom Binary Numbers (between 25-30 chars)
     * 
     * @return string   
     */
    private function getRandomBinaryNumbers() {
        $rand = mt_rand();
        return decbin($rand);
    }

    /**
     * Function to set Char Limit 
     * 
     * @param int $char_limit
     * @return void
     */
    function setCharLimit($char_limit) {
        $this->charLimit = $char_limit;
    }

    /**
     * Function to set CharArray
     * 
     * @param int $charArray
     * @return void
     */
    function setType($charArray) {
        $this->charArray = array_merge($this->charArray, $charArray);
    }

}

?>



No hay comentarios: