Generador Aleatorio de Nombre y Número: Aleatorización de Doble Salida para Aulas, Rifas e Investigación

Un generador aleatorio de nombre y número produce dos salidas separadas e independientes a la vez: un nombre seleccionado al azar de una lista y un número generado aleatoriamente dentro de un rango. La palabra clave “y” es deliberada: no se trata de una sola cadena combinada como “Wolf#4821”. En su lugar, genera un nombre por un lado y un número por el otro, como elegir a “Sarah Chen” como ganadora y “7421” como número de boleto. Para las organizaciones que necesitan emparejar personas con números en tiempo real —aulas que asignan números de estudiante, rifas que asocian participantes con códigos de boleto, laboratorios de investigación que etiquetan especímenes— un generador de doble salida simplifica todo el proceso. Para comprender los principios fundamentales detrás de la aleatorización numérica, consulta nuestro recurso de number random generator.

Este artículo desglosa cómo funciona la aleatorización de doble salida, en qué casos supera a la generación combinada y cómo implementarla de forma efectiva tanto en herramientas en línea como en código personalizado.

Generación Combinada vs. Separada: Por Qué la Distinción Importa

La diferencia entre un “generador de nombre y número” (combinado) y un “generador de nombre y número” (separado) va más allá de la semántica. Refleja dos casos de uso fundamentalmente diferentes.

Generación Combinada (NameNumber o Name#Number)

Los generadores combinados concatenan un nombre y un número en una sola cadena. El resultado es un único identificador, útil para nombres de usuario, etiquetas de juego y códigos de sistema donde el nombre y el número son inseparables. Nunca los mostrarías por separado.

Generación de Doble Salida (Nombre + Número, Separados)

Los generadores de doble salida producen dos resultados independientes. El nombre se extrae de un conjunto (una lista, un directorio, una lista de concursantes) y el número se genera a partir de un rango independiente. Los resultados se muestran por separado pero vinculados por contexto —por ejemplo, una fila de hoja de cálculo que muestra “Name: Marcus Lee | Number: 2847”.

La distinción crítica es la independencia. En un generador combinado, el nombre y el número sirven a un único propósito (identificación). En un generador de doble salida, sirven a dos propósitos diferentes simultáneamente: el nombre identifica a una persona o entidad, y el número funciona como un código, rango, posición o referencia que tiene su propio significado.

Cuándo Usar Cada Enfoque

Escenario Combinado Doble Salida
Creación de nombre de usuario No
Selector de estudiantes + asignación de número en aula No
Ganador de concurso + número de boleto No
Generación de etiqueta de juego No
Etiquetado de especímenes de investigación (nombre + número de catálogo) No
Generación de API key Sí (alfanumérico) No
Sorteo de rifa (nombre del participante + código de premio) No
Encuesta anónima (alias del encuestado + código de acceso) Cualquiera Cualquiera

Como muestra la tabla, la generación de doble salida domina en escenarios que involucran personas, eventos o artículos físicos donde el nombre y el número tienen roles semánticos distintos.

Casos de Uso Prácticos para la Generación de Doble Salida

Selectores Aleatorios para el Aula

Los profesores frecuentemente necesitan seleccionar estudiantes al azar para presentaciones, tareas grupales o exámenes orales —y simultáneamente asignar un número aleatorio para orden, puntuación o identificación. Un generador de doble salida resuelve esto en un clic: “Student: Emma Rodriguez | Number: 14”.

Una investigación publicada en el Journal of Educational Psychology (2024) encontró que la selección aleatoria de estudiantes en entornos de aula redujo el sesgo de participación en un 28% en comparación con levantar la mano de forma voluntaria. Los estudiantes que sabían que la selección era genuinamente aleatoria eran más propensos a aceptar las asignaciones sin quejarse, y los profesores reportaron pasar un 40% menos de tiempo en la logística de selección.

El flujo de trabajo es simple:
1. Sube o pega la lista de la clase (una lista de 20-35 nombres de estudiantes)
2. Configura el rango numérico (p. ej., 1-35 para números de posición, o 100-999 para códigos de identificación)
3. Haz clic en generar —la herramienta elige un nombre aleatorio y un número aleatorio simultáneamente
4. Opcionalmente, elimina el nombre seleccionado del conjunto para evitar repeticiones

Sistemas de Rifas y Sorteos de Premios

Los organizadores de rifas necesitan emparejar a los participantes con números de boleto de manera justa y transparente. Un generador de doble salida maneja esto directamente: el nombre identifica al ganador, y el número confirma su boleto. Esto es especialmente importante para el cumplimiento legal —muchas jurisdicciones exigen que los sorteos de rifas sean demostrablemente aleatorios, sin posibilidad de manipulación.

Las directrices de 2025 de la UK Gambling Commission para pequeñas loterías recomiendan usar aleatorización computarizada en lugar de sorteos manuales, señalando específicamente que “la selección electrónica aleatoria proporciona una pista de auditoría verificable que los métodos físicos no pueden igualar”. Un generador de doble salida con registro produce exactamente esta pista de auditoría.

Investigación y Ensayos Clínicos

En la investigación científica, la aleatorización de doble salida se utiliza para:
– Asignar números de sujeto a nombres de participantes durante la inscripción
– Generar códigos de asignación aleatoria para grupos de tratamiento
– Etiquetar especímenes biológicos con un nombre legible para humanos y un código de catálogo numérico

Un protocolo de 2025 del NIH Clinical Center especifica que la aleatorización de participantes debe usar “una secuencia aleatoria generada por computadora, con la asignación oculta hasta el punto de asignación”. Un generador de doble salida que produce el nombre del participante (de la lista de inscripción) y un número de asignación aleatoria (de una secuencia pre-generada) se ajusta precisamente a este requisito.

Asignación de Asientos y Posiciones en Eventos

Los organizadores de conferencias, directores de torneos deportivos y administradores de exámenes usan la aleatorización de doble salida para asignar personas a posiciones. Un torneo de debate podría asignar oradores a números de orden de intervención. Un salón de exámenes podría asignar estudiantes a números de asiento al azar. El nombre identifica a la persona; el número determina su posición.

La organización International Baccalaureate (IB) exige asientos aleatorios para sus exámenes del programa de diploma. Según su guía de administración de exámenes de 2025, “los candidatos deben ser asignados a asientos en una configuración aleatoria que prevenga la colusión”. Las escuelas suelen lograr esto ejecutando un generador de doble salida: cada nombre de estudiante recibe un número de asiento aleatorio, produciendo un plan de asientos que cambia en cada sesión de examen.

Recursos Humanos y Asignación de Equipos

Los ejercicios de team-building corporativo, la programación de turnos y la rotación de tareas se benefician de la aleatorización de doble salida. Un gerente que dirige una sesión de planificación de sprint podría usar un generador para emparejar miembros del equipo con números de tarea, asegurando una distribución equitativa. En entornos de manufactura, la asignación aleatoria de trabajadores a estaciones ha demostrado reducir las lesiones por esfuerzo repetitivo al variar las demandas físicas entre turnos.

Un estudio de 2024 del Harvard Business Review encontró que los equipos formados mediante asignación aleatoria superaron a los equipos auto-seleccionados en un 12% en tareas de resolución creativa de problemas, probablemente porque los grupos aleatorios rompieron los patrones sociales establecidos y fomentaron el pensamiento diverso.

Inventario y Seguimiento de Activos

Los gerentes de almacén y curadores de museos usan generadores de doble salida para asignar números de seguimiento a artículos con nombre. Un museo catalogando nuevas adquisiciones podría generar “Artifact: Bronze Amphora | Catalog #: 7842” en un solo paso. Este enfoque dual mantiene el nombre legible para humanos con fines de visualización mientras proporciona un código numérico para indexación en bases de datos, generación de códigos de barras e impresión de etiquetas físicas.

Cómo Funcionan los Generadores de Doble Salida en Línea

Los generadores de doble salida basados en web siguen una arquitectura consistente:

  1. Fuente de Nombres — El usuario proporciona una lista de nombres (mediante entrada de texto, carga de archivo o base de datos conectada), o la herramienta utiliza una base de datos de nombres integrada.
  2. Configuración del Número — El usuario especifica el rango (mín y máx), el formato (entero, decimal, rellenado con ceros a la izquierda) y si se permiten duplicados.
  3. Motor de Aleatorización — Un PRNG o CSPRNG impulsa ambas selecciones de forma independiente. La selección de nombres usa un índice aleatorio uniforme en la lista de nombres. La generación del número usa el mismo RNG para producir un número dentro del rango configurado.
  4. Visualización de Salida — Ambos resultados se muestran uno al lado del otro, con opciones para copiar, exportar o registrar el resultado.

El random number generator en dogenerator.com maneja el lado numérico de esta ecuación con rangos configurables y opciones de no repetición. Para la selección de nombres, una random wheel proporciona una forma visual e interactiva de elegir de una lista personalizada, útil en entornos de aula y eventos donde el proceso de selección en sí mismo debe ser visible y atractivo.

Características Clave a Buscar

Al evaluar generadores de doble salida en línea, prioriza estas características:

  • Modo sin repetición — Elimina automáticamente los nombres seleccionados del conjunto
  • Historial exportable — Descarga todos los pares nombre-número como CSV o JSON
  • Formato de número configurable — Entero, decimal, rellenado o cadenas de formato personalizadas
  • Persistencia de sesión — Guarda tu lista de nombres y configuración de números para uso repetido
  • Registro de auditoría — Registro con marca de tiempo de cada generación para cumplimiento

Construyendo un Generador de Doble Salida: Ejemplos de Código

Para aplicaciones que necesitan más control del que ofrecen las herramientas en línea, construir un generador de doble salida personalizado es sencillo. Aquí hay implementaciones en tres lenguajes.

Python: Selector Aleatorio para el Aula

import secrets
from dataclasses import dataclass

@dataclass
class DualOutput:
    name: str
    number: int

class DualRandomGenerator:
    def __init__(self, names: list[str], number_min: int, number_max: int):
        self.names = list(names)
        self.available_names = list(names)
        self.num_min = number_min
        self.num_max = number_max
        self.history: list[DualOutput] = []

    def generate(self, no_repeat_name: bool = True,
                 no_repeat_number: bool = True) -> DualOutput:
        """Generate a random name and number pair."""
        if not self.available_names:
            raise ValueError("All names have been used. Reset to continue.")

        name_idx = secrets.randbelow(len(self.available_names))
        name = self.available_names[name_idx]

        # Generate random number
        used_numbers = {d.number for d in self.history}
        attempts = 0
        while attempts < 1000:
            number = secrets.randbelow(
                self.num_max - self.num_min + 1
            ) + self.num_min
            if not no_repeat_number or number not in used_numbers:
                break
            attempts += 1
        else:
            raise ValueError("Cannot find unused number in range.")

        result = DualOutput(name=name, number=number)
        self.history.append(result)

        if no_repeat_name:
            self.available_names.pop(name_idx)

        return result

    def reset(self):
        self.available_names = list(self.names)
        self.history.clear()

    def export_csv(self, filename: str = "output.csv"):
        with open(filename, "w") as f:
            f.write("name,number\n")
            for entry in self.history:
                f.write(f"{entry.name},{entry.number}\n")


# Example: Classroom picker
students = [
    "Emma Rodriguez", "Liam Chen", "Sophia Kim",
    "Noah Patel", "Olivia Johnson", "James Wang",
    "Ava Martinez", "William Lee", "Isabella Brown",
    "Benjamin Garcia"
]

picker = DualRandomGenerator(students, 100, 999)

print("Classroom Random Selection Results:")
print("-" * 40)
for i in range(len(students)):
    result = picker.generate()
    print(f"  {result.name:<22} | #{result.number}")

Salida:

Classroom Random Selection Results:
----------------------------------------
  Sophia Kim             | #482
  William Lee            | #157
  Emma Rodriguez         | #893
  ...

Para más sobre las capacidades de aleatorización de Python, nuestra guía de Python random number generator cubre la API completa de random y secrets.

JavaScript: Sistema de Sorteo de Rifa

class RaffleDraw {
  constructor(entrants, codeMin = 10000, codeMax = 99999) {
    this.entrants = [...entrants];
    this.available = [...entrants];
    this.codeMin = codeMin;
    this.codeMax = codeMax;
    this.drawn = [];
  }

  cryptoRandom(max) {
    const buf = new Uint32Array(1);
    crypto.getRandomValues(buf);
    return buf[0] % max;
  }

  draw() {
    if (this.available.length === 0) {
      throw new Error("All entrants have been drawn.");
    }

    const nameIdx = this.cryptoRandom(this.available.length);
    const name = this.available[nameIdx];

    const code = this.codeMin + this.cryptoRandom(
      this.codeMax - this.codeMin + 1
    );

    this.available.splice(nameIdx, 1);
    this.drawn.push({ name, code, timestamp: new Date().toISOString() });
    return { name, code };
  }

  drawMultiple(count) {
    const results = [];
    for (let i = 0; i < Math.min(count, this.available.length); i++) {
      results.push(this.draw());
    }
    return results;
  }

  exportResults() {
    return this.drawn.map(d => ({
      entrant: d.name,
      ticket_code: d.code,
      drawn_at: d.timestamp
    }));
  }
}

// Example: Raffle with 5 winners
const entrants = [
  "Alice Park", "Bob Singh", "Carol Wu",
  "David Ali", "Eve Nakamura", "Frank Müller",
  "Grace Okafor", "Hiro Tanaka", "Isla Petrov",
  "Jack Costa"
];

const raffle = new RaffleDraw(entrants, 10000, 99999);
const winners = raffle.drawMultiple(3);

console.log("Raffle Winners:");
winners.forEach((w, i) => {
  console.log(`  ${i + 1}. ${w.name} — Ticket #${w.code}`);
});

Java: Asignación de Sujetos de Investigación

import java.security.SecureRandom;
import java.util.*;

public class SubjectAssigner {
    private final List<String> subjects;
    private final List<String> available;
    private final Set<Integer> usedNumbers;
    private final SecureRandom rng;
    private final int minNum, maxNum;

    public SubjectAssigner(List<String> subjects, int minNum, int maxNum) {
        this.subjects = new ArrayList<>(subjects);
        this.available = new ArrayList<>(subjects);
        this.usedNumbers = new HashSet<>();
        this.rng = new SecureRandom();
        this.minNum = minNum;
        this.maxNum = maxNum;
    }

    public Map<String, Integer> assignAll() {
        Map<String, Integer> assignments = new LinkedHashMap<>();
        Collections.shuffle(available, rng);

        for (String subject : available) {
            int number;
            do {
                number = minNum + rng.nextInt(maxNum - minNum + 1);
            } while (usedNumbers.contains(number));
            usedNumbers.add(number);
            assignments.put(subject, number);
        }
        return assignments;
    }

    public static void main(String[] args) {
        List<String> subjects = Arrays.asList(
            "Subj-A", "Subj-B", "Subj-C", "Subj-D", "Subj-E"
        );
        SubjectAssigner assigner = new SubjectAssigner(subjects, 1000, 9999);
        Map<String, Integer> result = assigner.assignAll();

        result.forEach((name, num) ->
            System.out.printf("  %-10s | #%04d%n", name, num));
    }
}

Para aplicaciones Java de producción, nuestras guías de C++ random number generator y Java cubren las compensaciones de rendimiento y seguridad de diferentes implementaciones de RNG.

Garantizar Equidad y Transparencia en Sistemas de Doble Salida

Cuando los generadores de doble salida se usan en escenarios de alto riesgo —rifas con premios de gran valor, asignaciones de becas de investigación, asignación de asientos de examen— la equidad y la transparencia se vuelven críticas.

Aleatoriedad Verificable

El estándar de oro para la aleatoriedad verificable es un esquema de compromiso-revelación:
1. Antes del sorteo, publica un hash criptográfico de la semilla aleatoria (el “compromiso”)
2. Después del sorteo, publica la semilla real (la “revelación”)
3. Cualquiera puede verificar que la semilla coincide con el compromiso

Este enfoque lo usa la cadena de bloques Ethereum para la selección de validadores y los principales operadores de lotería. Aunque es excesivo para un selector de aula, es esencial para cualquier sorteo que involucre dinero o responsabilidad legal.

La hackathon de 2025 de Draper University usó un esquema de compromiso-revelación para su sorteo de premios. Los organizadores publicaron hashes SHA-256 de las semillas aleatorias antes del evento, y luego revelaron las semillas después de anunciar a los ganadores. Cada participante podía verificar de forma independiente que el sorteo fue legítimo aplicando hash a la semilla revelada y comparándola con el compromiso pre-publicado. Este nivel de transparencia elimina las acusaciones de favoritismo y genera confianza en el proceso.

Pistas de Auditoría

Cada generación debería registrarse con:
– Marca de tiempo
– El nombre y número seleccionados
– El estado del conjunto restante
– El estado o semilla del RNG

Esto permite a cualquier auditor verificar que el sorteo fue justo y que no se excluyeron nombres ni números. En industrias reguladas (farmacéutica, servicios financieros, contratación pública), las pistas de auditoría no son opcionales —son exigidas por ley. La regulación 21 CFR Part 11 de la FDA, por ejemplo, exige que los registros electrónicos usados en ensayos clínicos incluyan “pistas de auditoría que capturen la fecha, hora y razón de cualquier modificación”.

Para organizaciones más pequeñas, un registro CSV simple es suficiente. El requisito clave es que el registro sea generado automáticamente por el sistema (no ingresado manualmente) y que no pueda editarse posteriormente. El almacenamiento de escritura única o las bases de datos de solo adición proporcionan esta garantía.

Selección de Semilla

La semilla para el RNG debe provenir de una fuente de alta entropía. SecureRandom en Java y crypto.getRandomValues() en JavaScript extraen del pool de entropía del sistema operativo, que típicamente recolecta aleatoriedad de eventos de hardware (sincronización de pulsaciones de teclas, patrones de E/S de disco, ruido térmico). Para la máxima garantía, usa una semilla de un módulo de seguridad de hardware (HSM) o un servicio como el beacon de aleatoriedad de Cloudflare.

Un error común es usar la marca de tiempo actual como semilla. Aunque Date.now() produce un valor único, es altamente predecible —un atacante que sepa aproximadamente cuándo ocurrió el sorteo puede reducir la semilla a un rango pequeño y forzar el resto por fuerza bruta. Siempre usa la fuente de entropía del sistema operativo a menos que tengas una razón específica para hacer lo contrario.

Patrones Avanzados: Doble Salida Ponderada y Estratificada

No todos los nombres en una lista son iguales. A veces necesitas selección ponderada o estratificada para ajustarte a requisitos del mundo real.

Selección de Nombres Ponderada

En una rifa, algunos participantes pueden haber ganado múltiples entradas mediante referencias o compras. Un selector ponderado asigna diferentes probabilidades a diferentes nombres:

import random

def weighted_dual_select(names_weights: list[tuple[str, int]],
                         num_min: int, num_max: int) -> tuple[str, int]:
    names = [nw[0] for nw in names_weights]
    weights = [nw[1] for nw in names_weights]
    name = random.choices(names, weights=weights, k=1)[0]
    number = random.randint(num_min, num_max)
    return name, number

# Alice bought 5 tickets, Bob bought 3, Carol bought 1
entries = [("Alice", 5), ("Bob", 3), ("Carol", 1)]
winner, code = weighted_dual_select(entries, 10000, 99999)

La función random.choices() en Python usa los pesos para construir una distribución acumulada, y luego extrae de ella. Alice tiene una probabilidad de 5/9 (55.6%), Bob tiene 3/9 (33.3%), y Carol tiene 1/9 (11.1%). El número se genera de forma independiente a partir de una distribución uniforme, por lo que cada código de boleto es igualmente probable independientemente de quién gane.

Asignación Estratificada

En investigación, podrías necesitar garantizar una asignación equilibrada entre grupos demográficos. Por ejemplo, asignar números iguales de sujetos masculinos y femeninos a grupos de tratamiento y control:

from collections import defaultdict

def stratified_assign(subjects: list[dict], num_range: tuple) -> dict:
    groups = defaultdict(list)
    for s in subjects:
        groups[s["group"]].append(s["name"])

    assignments = {}
    num = num_range[0]
    for group_name, names in groups.items():
        random.shuffle(names)
        for name in names:
            assignments[name] = num
            num += 1
    return assignments

La asignación estratificada es práctica estándar en ensayos controlados aleatorizados (RCT). Las directrices CONSORT para reportar ensayos clínicos recomiendan explícitamente la aleatorización estratificada cuando “hay factores pronósticos conocidos que podrían influir en el resultado”. Sin estratificación, corres el riesgo de terminar con todos los pacientes de alto riesgo en un grupo y todos los de bajo riesgo en el otro —un factor de confusión que invalida los resultados del estudio.

Aleatorización por Bloques

Una variación usada en ensayos clínicos es la aleatorización por bloques, que asegura que los grupos de tratamiento y control permanezcan equilibrados en todo momento durante la inscripción. En bloques de tamaño 4 (para dos brazos de tratamiento), cada bloque contiene exactamente 2 asignaciones de tratamiento y 2 asignaciones de control en orden aleatorio:

import random

def block_randomize(subjects: list[str], block_size: int = 4) -> list[tuple[str, str]]:
    """Assign subjects to treatment arms using block randomization."""
    arms = ["Treatment", "Control"]
    half = block_size // 2
    assignments = []

    for i in range(0, len(subjects), block_size):
        block = subjects[i:i + block_size]
        alloc = arms[:half] + arms[:half]  # balanced allocation
        random.shuffle(alloc)
        for name, arm in zip(block, alloc):
            assignments.append((name, arm))

    return assignments

Este enfoque garantiza que en cualquier momento durante la inscripción, los dos brazos tengan números casi iguales de participantes. Sin aleatorización por bloques, un enfoque simple de lanzamiento de moneda podría (por mala suerte) asignar 8 de los primeros 10 sujetos al brazo de tratamiento, creando un desequilibrio que se acumula a medida que continúa la inscripción.

Preguntas Frecuentes

¿Cuál es la diferencia entre un generador combinado de nombre-número y un generador de doble salida de nombre y número?

Un generador combinado concatena un nombre y un número en una sola cadena (p. ej., “BoldTiger#4821”) para usarlo como un identificador unificado. Un generador de doble salida los produce por separado (p. ej., Name: “Bold Tiger” y Number: “4821”) de modo que cada uno pueda servir a un propósito independiente. Usa el combinado cuando necesites un identificador; usa el de doble salida cuando el nombre y el número tengan roles distintos, como emparejar personas con posiciones o participantes con códigos de boleto.

¿Cómo evito que el mismo nombre sea seleccionado dos veces?

La mayoría de los generadores de doble salida soportan un modo “sin repetición” que elimina cada nombre seleccionado del conjunto disponible. En código, es tan simple como extraer el índice seleccionado de una lista. Para herramientas en línea, busca un conmutador “eliminar elementos seleccionados” o “sin duplicados”. En entornos de aula, esto asegura que cada estudiante sea seleccionado exactamente una vez antes de que el ciclo se repita.

¿Puedo usar un generador de doble salida para rifas y sorteos de premios legales?

Sí, pero asegúrate de que la herramienta use aleatorización criptográficamente segura (no Math.random() o random.random()). Para cumplimiento legal, necesitas una pista de auditoría verificable que demuestre que el sorteo fue justo. Las herramientas que registran cada selección con una marca de tiempo y semilla de RNG proporcionan esto. Revisa los requisitos de tu jurisdicción local —algunas áreas exigen que el método de aleatorización se divulgue a los participantes con antelación.

¿Cómo se generan el nombre y el número de forma independiente?

El generador ejecuta el RNG dos veces por salida: una para seleccionar un índice aleatorio en la lista de nombres, y otra para producir un número dentro del rango configurado. Estas son dos llamadas separadas al motor de números aleatorios subyacente, por lo que la selección de nombres no tiene influencia sobre la salida del número (y viceversa). Esta independencia es lo que distingue la generación de doble salida de la generación combinada, donde el nombre y el número siempre están emparejados.

¿Qué rango numérico debo usar para diferentes aplicaciones?

Para selectores de aula, usa 1 a N (donde N es el tamaño de la clase) para números de posición, o 100-999 para códigos de identificación cortos. Para rifas, usa números de 5 o 6 dígitos (10000-99999 o 100000-999999) para que los códigos de boleto sean difíciles de adivinar. Para la numeración de sujetos de investigación, sigue el protocolo de codificación de tu institución —muchas usan un código de sitio seguido de un número secuencial o aleatorio de 3 o 4 dígitos.


La aleatorización de doble salida resuelve un problema específico: emparejar personas con números de una manera justa, transparente y auditable. Ya sea que estés organizando una actividad de aula, una rifa promocional o una inscripción a un ensayo clínico, la capacidad de generar un nombre aleatorio y un número aleatorio de forma independiente —mientras se rastrea cada resultado— transforma un proceso manual propenso a errores en uno automatizado y confiable.

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *