Foros del Web » Programando para Internet » PHP »

Generar códigos aleatorios y verificar que no se repitan en mysql

Estas en el tema de Generar códigos aleatorios y verificar que no se repitan en mysql en el foro de PHP en Foros del Web. Hola quisiera saber como puedo extender el script de php que tengo para crear códigos aleatorios con un formato xxxxx-xxxxx-xxxxx-xxxxx-xxx15 donde el 15 del final ...
  #1 (permalink)  
Antiguo 07/01/2015, 18:48
Avatar de MLDGATO  
Fecha de Ingreso: marzo-2011
Ubicación: Guatemala
Mensajes: 113
Antigüedad: 13 años, 9 meses
Puntos: 2
Pregunta Generar códigos aleatorios y verificar que no se repitan en mysql

Hola quisiera saber como puedo extender el script de php que tengo para crear códigos aleatorios con un formato xxxxx-xxxxx-xxxxx-xxxxx-xxx15 donde el 15 del final es el año actual, tengo este código que me genera códigos aleatorios entre números y letras, pero el formato de este código es xxxxxxxxxx de 10 caracteres y quisiera que sea como el formato anterior y que verifique en la base de datos si no existe:

Código PHP:
function generarCodigo()
        {
            
$key '';
            
$pattern '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
            
$max strlen($pattern)-1;
            for(
$i=0$i 10$i++) $key .= $pattern{mt_rand(0,$max)};
            return 
$key;
        }
        
$id generarCodigo(); 
La variable $id guarda el código, para verificar en la base de datos hice esto pero no se si están bien:

Código PHP:
function generarCodigo($conexion)
    {
        
$key '';
        do
        {
            
$pattern '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
            
$max strlen($pattern)-1;
            for(
$i=0$i 10$i++) $key .= $pattern{mt_rand(0,$max)};
            
$consulta_verificar mysqli_query($conexion"SELECT * FROM codigos WHERE Valor = '".$key."'");
            
$verificar mysqli_num_rows($consulta_verificar);
        }
        while(
$verificar==1);
        return 
$key;
    }
    
    
$numero generarCodigo($conexion); 
Donde la variable $numero me guarda el código generado y en teoría verificó en mi base de datos, pero no se como hacer la lógica para que me quede en el el formato xxxxx-xxxxx-xxxxx-xxxxx-xxx15

Muchas gracias por la ayuda.
  #2 (permalink)  
Antiguo 07/01/2015, 19:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Generar códigos aleatorios y verificar que no se repitan en mysql

Te invito a reflexionar tu problema antes de que te ahogues:

Piensa, que en algún momento tendrás montones de registros en la BD, ¿planeas verificar la existencia del código que has generado?

Tendrías que hacer, al menos una consulta por cada código a verificar (tal cual lo indicas en tu código), y suponiendo que se dupliquen vas a terminar haciendo muchas consultas a la BD.

Y así será todo el tiempo, mientras más registros agregues más consultas tendrás que hacer, y por lo tanto es una solución frágil.

Ese es un verdadero problema a la larga.

Por otro lado, generar el formato xxxxx-xxxxx-xxxxx-xxxxx-xxx15 es cosa fácil:

Código PHP:
Ver original
  1. function genId() {
  2.   $format = 'xxxxx-xxxxx-xxxxx-xxxxx-xxxy';
  3.  
  4.   return preg_replace_callback('/[xy]/', function($match) {
  5.     $pattern = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  6.  
  7.     if ($match[0] === 'x') {
  8.       return substr($pattern, mt_rand(0, strlen($pattern)), 1);
  9.     } else {
  10.       return substr(date('y'), -2);
  11.     }
  12.   }, $format);
  13. }
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 07/01/2015, 19:48
Avatar de MLDGATO  
Fecha de Ingreso: marzo-2011
Ubicación: Guatemala
Mensajes: 113
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Generar códigos aleatorios y verificar que no se repitan en mysql

Gracias por contestar, no había pensado eso de de hacer varias consultas pero debo hacerlo ya que estoy diseñando una plataforma elearning con varios cursos y cada código me sirve para que los alumnos activen su curso y la idea es que solo utilicen códigos nuevos y no usados, me el script que me diste me sirve mucho, gracias.
  #4 (permalink)  
Antiguo 07/01/2015, 20:21
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Generar códigos aleatorios y verificar que no se repitan en mysql

No deberías basar la generación de dichos códigos en valores al azar, de hecho deberías usar valores auto_increment pues siempre serán únicos.

¿Para qué generar el código entonces?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 07/01/2015, 21:11
Avatar de MLDGATO  
Fecha de Ingreso: marzo-2011
Ubicación: Guatemala
Mensajes: 113
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Generar códigos aleatorios y verificar que no se repitan en mysql

Mi problema es que dicho código lo voy a vender para que tengan acceso y si los hago incrementables cualquiera sabría que código usar.

Última edición por MLDGATO; 07/01/2015 a las 21:27
  #6 (permalink)  
Antiguo 08/01/2015, 00:03
 
Fecha de Ingreso: enero-2015
Ubicación: Cordoba, Andalucía
Mensajes: 111
Antigüedad: 9 años, 11 meses
Puntos: 15
Respuesta: Generar códigos aleatorios y verificar que no se repitan en mysql

A mi parecer está función está muy bien

Última edición por MrGilbertMan; 08/01/2015 a las 00:55

Etiquetas: consultas+mysql
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 07:22.