Foros del Web » Programando para Internet » PHP »

Generar códigos alfanumericos sin repetir

Estas en el tema de Generar códigos alfanumericos sin repetir en el foro de PHP en Foros del Web. Buenos días, necesito una función para crear N códigos alfanuméricos sin que estos se repitan entre si y que tengan una longitud determinada. algo así ...
  #1 (permalink)  
Antiguo 24/07/2014, 06:40
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Generar códigos alfanumericos sin repetir

Buenos días,


necesito una función
para crear N códigos alfanuméricos sin que estos se repitan entre si
y que tengan una longitud determinada.


algo así como generarCodigos(cantidad, longitud)


y que me retorne algo asi como generarCodigos(3,10)

XSE42SJ4N1
7MCDL21450
3456SJM401


planeo generar 1000 o 5000 códigos aleatorios sin que se repitan entre si
alguien tiene una función similar o sabe como hacerla?

gracias por la colaboración prestada.
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #2 (permalink)  
Antiguo 24/07/2014, 07:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Generar códigos alfanumericos sin repetir

http://php.net/manual/es/function.uniqid.php

No es exactamente lo que buscas, pero te puede inspirar, tiene una ventaja ya esta hecho.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 24/07/2014, 17:22
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: Generar códigos alfanumericos sin repetir

He usado algo parecido para generación de contraseñas aleatorias, asíque lo tenía ya guardado en la cabeza, lo he modificado un poco para que te sirva exactamente para lo que pedías.

Código PHP:
Ver original
  1. $caracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  2. $caracteres .= "1234567890";
  3. $final = array();
  4. $longitud = 10;
  5. $carac_desordenada = str_shuffle($caracteres);
  6. for($i=0;$i<=$longitud;$i++) {
  7. $final[$i] = $carac_desordenada[$i]; }
  8. //recorremos la array e imprimimos
  9. foreach($final as $datos) {
  10. echo $datos; }

Primero creamos una variable string con todas los caracteres que queremos que tenga nuestro código. En el caso de quieras también minúsculas añade
Cita:
$caracteres .= "abcdefghijklmnopqrstuvwxyz";
Después mesclamos con str_shuffle el string, es decir, lo desordenamos. Creamos un bucle que se repite tantas veces como longitud queramos darle a nuestro código, y añadimos los 10 primeros numeros a una array que teniamos vacia preparado para esto.

Lo hago de esta manera como pensando que se tratase de las bolas de lotería, si sacamos el 1 de la cesta, obviamente el 1 ya no podrá volver a salir. por eso uso str_shuffle

Si cambias la varaible $longitud del código al 15, el código será de 15 caracteres.

Espero que te sirva.
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #4 (permalink)  
Antiguo 25/07/2014, 06:12
 
Fecha de Ingreso: enero-2011
Ubicación: Barcelona
Mensajes: 36
Antigüedad: 13 años, 3 meses
Puntos: 5
Respuesta: Generar códigos alfanumericos sin repetir

Si me lo permites rodrypaladin, teniendo en cuenta que lexus hizo hincapié en que no se repitan los códigos, en tu función aparte de que los caracteres no se pueden repetir, existe un pequeña posibilidad de que los códigos se repitan.

He modificado el tuyo para montarlo en una función.
Se especifica la cantidad (por defecto 1), la longitud (por defecto 10) y si incluye caracteres numéricos (por defecto sí).

Esta función comprueba específicamente que el código que genera no haya salido ya con anterioridad.

Código PHP:
function generarCodigos($cantidad=3$longitud=10$incluyeNum=true){
    
$caracteres "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    if(
$incluyeNum)
        
$caracteres .= "1234567890";
    
    
$arrPassResult=array();
    
$index=0;
    while(
$index<$cantidad){
        
$tmp="";
        for(
$i=0;$i<$longitud;$i++){
            
$tmp.=$caracteres[rand(0,strlen($caracteres)-1)];
        }
        if(!
in_array($tmp$arrPassResult)){
            
$arrPassResult[]=$tmp;
            
$index++;
        }
    }
    return 
$arrPassResult;

$codigos=generarCodigos(3,10);
print_r($codigos); // Array ( [0] => XOIU3JIGY5 [1] => 16LJO4S0HO [2] => RU7HY16MI6 ) 
Espero que te sirva.

Saludos, Alex.
  #5 (permalink)  
Antiguo 25/07/2014, 06:30
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: Generar códigos alfanumericos sin repetir

Cita:
Iniciado por alx1417 Ver Mensaje
Esta función comprueba específicamente que el código que genera no haya salido ya con anterioridad.
Pensaba que cuando decía que no se repitiera, se refería a que no salieran 2 caracteres iguales en el código, no que el código final generado no saliera jamás de nuevo.

En ese caso no he dicho nada. XD
__________________
No te olvides de dar +1 a quien te echa un cable ;)

Etiquetas: repetir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:15.